MySql數據庫

數據庫概述

什麼是數據庫?

  • 數據庫就是一個文件系統,只不過我們需要通過SQL命令來操作這個文件系統。
  • 數據庫(DataBase)是按照數據結構來組織,存儲和管理數據的建立在計算機存儲設備上的倉庫。
  • 作用:存儲數據,數據的倉庫,帶有訪問權限,限制不同的人可以有不同的操作。
  • java EE操作的都是後臺數據,取到後臺數據進行封裝,然後交給前端去展現。

有哪些數據庫

  • mysql:開源免費,適用於中小企業的免費數據庫。
  • oracle:甲骨文公司,收費軟件,適用於大型網站。
  • db2:IBM公司,做解決方案,軟件和硬件,服務器架構,銀行系統。
  • sqlserver:windows裏,政府網站。asp.net 大學教學,圖形化做得好。

Mysql的sql語句有哪些?

  • SQL(Structure Query Language)結構化查詢語言
  • DDL數據定義語言:定義數據庫,數據表他們的結構,create(創建),drop(刪除),alert(修改)
  • DML數據操縱語言:主要用來操作數據,insert(插入),update(修改),delete(刪除)
  • DCL數據控制語言:定義訪問權限,取消訪問權限,安全設置,grant
  • DQL數據查詢語言:select(查詢) from子句 where子句

數據庫的CRUD操作(增刪改查)

  • 登錄數據庫服務器
mysql -uroot -pdaq
  • 創建數據庫:
create database 數據庫的名字;
create database 數據庫的名字 character set 字符集;//指定字符集
  • 查看所有數據庫
show databases;

在這裏插入圖片描述

  • 查看指定數據庫:
show create database 數據庫的名字;
  • 修改數據庫的字符集
alter database 數據庫的名字character set 字符集;
  • 刪除數據庫
drop database 數據庫的名字;
  • 切換數據庫(選中數據庫)
use 數據庫的名字;
  • 查看當前正在使用的數據庫
select database();

表的創建

  • 創建表
create table 表名(列名 列的類型(長度) 約束,列名2 列的類型(長度) 約束);
列的類型:
java     sql
int      int
char     char(固定長度)
String   varchar(可變長度)長度代表字符的個數
         
         text:主要用來存放文本
         blob:存放的是二進制
列的約束:
	主鍵約束:primary key
	唯一約束:unique
	非空約束:not null
create table student(
	sid int primary key,
	sname varchar(10),
	sex int,
	age int);
  • 查看所有表:
show tables;
  • 查看錶的定義:
show create table 表名;
  • 查看錶結構:
desc 表名;
  • 修改表:
-添加列(add):
alter table 表名 add 列名 列的類型 列的約束;
alter table student add greade int not null;

-修改列(modify):
alter table 表名 modify sex varchar(2);

-修改列名(change):
alter table 表名 change sex gender varchar(2);

-刪除列(drop)
alter table 表名 drop greade;
  • 修改表名(rename)
rename table student to 新表名;
  • 修改表的字符集
alter table 表名 character set 字符集;
  • 刪除表
drop table 表名;

Sql完成對錶中數據的CRUD操作

  • 插入數據
insert into 表名(列名1,列名2,列名3values(1,值2,值3);
如:insert into student(sid,sname,sex,age)values(1,'zhangsan',1,23);

簡單寫法:插入的是全列名的數據,表名後面的列名可以省略
insert into 表名values(1,值2,值3);
如:insert into student values(1,'zhangsan',1,23);

如果插入的是部分數據,列名不能省略
如:insert into student(sid,sname,sex)values(1,'zhangsan',1);
 
批量插入:效率比單條插入效率高。但不能出錯
insert into student values(1,'zhangsan',123),
						  (2,'lisi',022),
						  (3,'wangwu',124);

  • 查看錶中數據
select * from student;
  • 表中插入數據中文亂碼問題
1.暫停Mysql服務
2.在Mysql安裝路徑中找到my.ini配置文件
3.將57行的編碼改成GBK。
4.保存,退出,啓動mysql服務
  • 刪除記錄
delete from 表名[where 條件]
delete from student where sid=10;
delete from student;  如果沒有指定條件,會將表中數據一條一條全部刪除掉。
  • 面試問題:
請說一下delete 刪除數據和truncate刪除數據有什麼差別?
答:delete:屬於DML數據操縱語言,一條一條刪除表中的數據。
	truncate:屬於DDL數據定義語言,先刪除表,在重建表。 
關於那條執行效率高:具體要看錶中的數據量。
	如果數據比較少,delete比較高效。
	如果數據比較多,truncate比較高效。 
  • 更新表記錄
update 表名 set 列名=列的值,列名2=列的值2 [where 條件]
需求:將sid爲5的名字改成李四
update student set sname='李四' where sid=5;
//如果參數是字符串或者日期,要加上單引號

select查詢的簡單查詢

select [distinct] [ * ] [列名,列名2] from 表名 [where 條件]
distinct:去除重複的數據
--簡單商品:手機數碼,鞋靴箱包
1.分類的ID
2.分類名稱
3.分類描述
//創建表
create table category(
	cid int primary key auto_increment,
	cname varchar(10),
	cdesc varchar(31)
	);
//插入數據	
insert into category values(null,'手機數碼','電子產品');
insert into category values(null,'鞋靴箱包','江南皮鞋廠');
insert into category values(null,'香菸酒水','黃鶴樓');
insert into category values(null,'酸奶餅乾','安慕希');
insert into category values(null,'家用電器','美的空調');
--所有商品
1.商品ID
2.商品名稱
3.商品價格
4,生產日期
5,商品分類ID
//創建表
create table product(
	pid int primary key auto_increment,
	pname varchar(10),
	price double,
	pdate timestamp,
	cno int 
	);
//插入數據
insert into product values(null,'xiaomi',998,null,1);
insert into product values(null,'chuizi',2998,null,1);
insert into product values(null,'nike',888,null,2);
insert into product values(null,'laocunzhang',88,null,3);
insert into product values(null,'jingjiu',32,null,3);
insert into product values(null,'xiaoxiong',3,null,4);
insert into product values(null,'weilong',0.5,null,5);
insert into product values(null,'wangwang',0.5,null,5);
  • 簡單查詢
1.查詢所有的商品:
select * from product;

2.查詢商品名稱和商品價格
select pname,price from product;

3.別名查詢,as 的關鍵字 ,as關鍵字可以省略
	-表別名:select p.pname,p.price,from product p;(主要用在多表查詢)
	select p.pname,p.price 
	from product as p;
	
	-列別名:select pname as 商品名稱,price as 商品價格 from product;
	select pname as 商品名稱,price as 商品價格 from product;

4.去掉重複的值
	-查詢商品所有的價格
	select distinct price from product;

5.select運算查詢
	select *,price*1.5 as 折後價 from product; 

6.條件查詢[where關鍵字]
	指定條件,確定要操作的記錄
	
	-查詢商品價格大於60元的所有商品信息
	select * from product where price>60;
 
7.where 後的條件寫法
	-關係運算符:>  >=  <  <=   =  !=  <>
		<> : 不等於   :標準SQL語法
		!= : 不等於   :非標準SQL語法
	-查詢商品價格不等於88的所有商品
	select * from product where price <> 88;
	select * from product where price != 88;
	-查詢商品價格在10100之間的商品
	select * from product where price<100 and price >10;
	select * from product where price between 10 and 100;
	-邏輯運算:and   or   not
	-查詢出商品價格 小於100 或者大於900
	select * from product where price <100 or price >900;
  • 複雜查詢
1.like :模糊查詢
	_ :代表的是一個字符
	% :代表的是多個字符
	in:在某個範圍內獲得值
	-查詢出名字中帶有餅的所有商品  ‘%%select * from product where pname like '%餅%';
	-查詢第二名字是熊的所有商品  '_熊%'
	select * from product where pname like '_熊%';
	-查詢出商品分類ID在145裏面的所有商品
	select * from product where cno in (1,4,5);

2.排序查詢: order by  關鍵字
	asc:   ascend  升序(默認的排序方式)
	desc: descend 降序
	-查詢所有商品,按照降序排序
	select * from product order by price desc;
	-查詢名稱有“小”的商品,按照升序排序
	select * from product where pname like '%小%' order by price asc;

3.聚合函數:
	-獲得所有商品價格總和:
	select sum(price) from product;
	-獲得所有商品價格平均值:
	select avg(price) from product;
	-獲得所有商品的個數:
	select count(*) from product;

4.分組:group by
	-根據cno字段分組,分組後統計商品的個數
	select cno,count(*) from product group by cno; 
	-根據cno字段分組,分組後統計商品的平均價格,並且商品平均價格 >60
	select cno,avg(price) from product group by cno having avg(price) >60;
	-having 關鍵字,他可以接聚合函數的,  出現在分組之後
	-where 關鍵字,他不可以接聚合函數,出現在分組之前

補充:

編寫順序:
S..F..W..G..H..O
select..from..where..group by..having..drder by

執行順序:
F..W..G..H..S..O
from..where..group by..having..select..drder by
發佈了50 篇原創文章 · 獲贊 53 · 訪問量 8821
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章