數(shù)據(jù)庫(kù)常用操作
功能 | sql |
查看所有數(shù)據(jù)庫(kù) | show databases; |
創(chuàng)建數(shù)據(jù)庫(kù) | create? database [if not exists] mydb1 [charset=utf8] |
切換數(shù)據(jù)庫(kù) | use mydb1; |
刪除數(shù)據(jù)庫(kù) | drop database?[if exists]?mydb1; |
修改數(shù)據(jù)庫(kù)編碼 | alter database mydb1 character set utf8; |
創(chuàng)建表格式
create table [if not exists]表名(
字段名1 類型[(寬度)] [約束條件] [comment '字段說(shuō)明'],
字段名2 類型[(寬度)] [約束條件] [comment '字段說(shuō)明'],
字段名3 類型[(寬度)] [約束條件] [comment '字段說(shuō)明']
)[表的一些設(shè)置];
use mydb1;
create table if not exists student(
sid int,
name varchar(20),
gender varchar(20),
age int,
birth date,
address varchar(20),
score double
);
數(shù)值類型
字符串類型
日期類型
對(duì)表結(jié)構(gòu)其他操作
功能 | sql |
查看當(dāng)前數(shù)據(jù)庫(kù)所有名稱 | show tables; |
查看指定某個(gè)表創(chuàng)建的語(yǔ)句 | show create table 表名; |
查看表結(jié)構(gòu) | desc 表名; |
刪除表 | drop table 表名; |
修改表結(jié)構(gòu)
alter table 表名 add 列名 類型(長(zhǎng)度) [約束];
alter table 表名 change 舊列名 新列名 類型(長(zhǎng)度) 約束;
eg:
#為student表的dept字段更換為department varchar(30)
ALTER TABLE student change `dept` department VARCHAR(30);
修改表刪除列
alter table 表名 drop 列名;
修改表名
rename table 表名 to 新表名;
數(shù)據(jù)插入
insert into 表 (列名1,列名2,列名3...) values (值1,值2,值3...); //向表中插入某些
insert into 表 values (值1,值2,值3...); //向表中插入所有列
數(shù)據(jù)修改
update 表名 set 字段名=值,字段名=值...;
update 表名 set 字段名=值,字段名=值... where 條件;
eg:
-- 將所有學(xué)生的地址修改為重慶
update student set address = '重慶’;
-- 講id為1004的學(xué)生的地址修改為北京
update student set address = '北京' where id = 1004
-- 講id為1005的學(xué)生的地址修改為北京,成績(jī)修成績(jī)修改為100
update student set address = '廣州',score=100 where id = 1005
數(shù)據(jù)刪除
delete from 表名 [where 條件];
truncate table 表名 或者 truncate 表名
注意:delete和truncate原理不同,delete只刪除內(nèi)容,而truncate類似于drop table ,可以理解為是將整個(gè)表刪除,然后再創(chuàng)建該表;
MySQL約束
分類
- 主鍵約束
- 自增長(zhǎng)約束
- 非空約束
- 唯一性約束
- 默認(rèn)約束
- 零填充約束
- 外鍵約束
MySQL主鍵約束是一個(gè)列或者多個(gè)列的組合,其值能唯一地標(biāo)識(shí)表中的每一行,方便在RDBMS中盡快的找到某一行。
主鍵約束相當(dāng)于 唯一約束 + 非空約束 的組合,主鍵約束列不允許重復(fù),也不允許出現(xiàn)空值。
每個(gè)表最多只允許一個(gè)主鍵
主鍵約束的關(guān)鍵字是:primary key
當(dāng)創(chuàng)建主鍵的約束時(shí),系統(tǒng)默認(rèn)會(huì)在所在的列和列組合上建立對(duì)應(yīng)的唯一索引。
單列主鍵
創(chuàng)建單列主鍵有兩種方式:一種是在定義字段的同時(shí)指定主鍵,一種是定義完字段之后指定主鍵。
-- 在 create table 語(yǔ)句中,通過(guò) PRIMARY KEY 關(guān)鍵字來(lái)指定主鍵。
--在定義字段的同時(shí)指定主鍵,語(yǔ)法格式如下:
create table 表名(
...
<字段名> <數(shù)據(jù)類型> primary key
...
)
eg:
create table emp1(
eid int primay key,
name VARCHAR(20),
deptId int,
salary double
);
多列主鍵(聯(lián)合主鍵)
所謂聯(lián)合主鍵,就是這個(gè)主鍵由一張表中多個(gè)字段組成。
create table 表名(
...
primary key (字段1,字段2,…,字段n)
);
create table emp3(
name varchar(20),
deptId int,
salary double,
primary key(name,deptId)
);
刪除主鍵約束
格式:
alter table <數(shù)據(jù)表名> drop primary key;
自增長(zhǎng)約束
在 MySQL 中,當(dāng)主鍵定義為自增長(zhǎng)后,這個(gè)主鍵的值就不再需要用戶輸入數(shù)據(jù)了,而由數(shù)據(jù)庫(kù)系統(tǒng)根據(jù)定義自動(dòng)賦值。每增加一條記錄,主鍵會(huì)自動(dòng)以相同的步長(zhǎng)進(jìn)行增長(zhǎng)。通過(guò)給字段添加auto_increment屬性來(lái)實(shí)現(xiàn)主鍵自增長(zhǎng)。
字段名 數(shù)據(jù)類型?auto_increment
create table t_user1(
id int primary key auto_increment,
name varchar(20)
);
默認(rèn)情況下,auto_increment的初始值是 1,每新增一條記錄,字段值自動(dòng)加 1。
一個(gè)表中只能有一個(gè)字段使用 auto_increment約束,且該字段必須有唯一索引,以避免序號(hào)重復(fù)(即為主鍵或主鍵的一部分)。
auto_increment約束的字段必須具備 NOT NULL 屬性。
auto_increment約束的字段只能是整數(shù)類型(TINYINT、SMALLINT、INT、BIGINT 等。
auto_increment約束字段的最大值受該字段的數(shù)據(jù)類型約束,如果達(dá)到上限,auto_increment就會(huì)失效。
非空約束
MySQL 非空約束(not null)指字段的值不能為空。對(duì)于使用了非空約束的字段,如果用戶在添加數(shù)據(jù)時(shí)沒(méi)有指定值,數(shù)據(jù)庫(kù)系統(tǒng)就會(huì)報(bào)錯(cuò)。
方式1:<字段名><數(shù)據(jù)類型> not null;
方式2:alter table 表名 modify 字段 類型 not null;
-- 方式1,創(chuàng)建表時(shí)指定
create table t_user6 (
id int ,
name varchar(20) not null,
address varchar(20) not null
);
create table t_user7 (
id int ,
name varchar(20) , -- 指定非空約束
address varchar(20) -- 指定非空約束
);
alter table t_user7 modify name varchar(20) not null;
alter table t_user7 modify address varchar(20) not null;
刪除非空約束
-- alter table 表名 modify 字段 類型
alter table t_user7 modify name varchar(20) ;
alter table t_user7 modify address varchar(20) ;
唯一約束
創(chuàng)建唯一約束
方式1:<字段名> <數(shù)據(jù)類型> unique
方式2: alter table 表名 add constraint 約束名 unique(列);
-- 創(chuàng)建表時(shí)指定
create table t_user8 (
id int ,
name varchar(20) ,
phone_number varchar(20) unique -- 指定唯一約束
);
刪除唯一約束
-- alter table <表名> drop index <唯一約束名>;
alter table t_user9 drop index unique_ph;
默認(rèn)約束
MySQL 默認(rèn)值約束用來(lái)指定某列的默認(rèn)值。
方式1: <字段名> <數(shù)據(jù)類型> default <默認(rèn)值>;
方式2: alter table 表名 modify 列名 類型 default 默認(rèn)值;
添加默認(rèn)約束
create table t_user10 (
id int ,
name varchar(20) ,
address varchar(20) default ‘北京’ -- 指定默認(rèn)約束
);
刪除默認(rèn)約束
-- alter table <表名> modify column <字段名> <類型> default null;
alter table t_user11 modify column address varchar(20) default null;
基本查詢
語(yǔ)法
select
[all|distinct]
<目標(biāo)列的表達(dá)式1> [別名],
<目標(biāo)列的表達(dá)式2> [別名]...
from <表名或視圖名> [別名],<表名或視圖名> [別名]...
[where<條件表達(dá)式>]
[group by <列名>
[having <條件表達(dá)式>]]
[order by <列名> [asc|desc]]
[limit <數(shù)字或者列表>];
select *| 列名 from 表 where 條件
比較運(yùn)算符
邏輯運(yùn)算符
排序查詢
select
字段名1,字段名2,……
from 表名
order by 字段名1 [asc|desc],字段名2[asc|desc]……
特點(diǎn)
1.asc代表升序,desc代表降序,如果不寫默認(rèn)升序
2.order by用于子句中可以支持單個(gè)字段,多個(gè)字段,表達(dá)式,函數(shù),別名
3.order by子句,放在查詢語(yǔ)句的最后面。LIMIT子句除外
-- 1.使用價(jià)格排序(降序)
select * from product order by price desc;
-- 2.在價(jià)格排序(降序)的基礎(chǔ)上,以分類排序(降序)
select * from product order by price desc,category_id asc;
-- 3.顯示商品的價(jià)格(去重復(fù)),并排序(降序)
select distinct price from product order by price desc;
聚合函數(shù)
-- 1 查詢商品的總條數(shù)
select count(*) from product;
-- 2 查詢價(jià)格大于200商品的總條數(shù)
select count(*) from product where price > 200;
-- 3 查詢分類為'c001'的所有商品的總和
select sum(price) from product where category_id = 'c001';
-- 4 查詢商品的最大價(jià)格
select max(price) from product;
-- 5 查詢商品的最小價(jià)格
select min(price) from product;
-- 6 查詢分類為'c002'所有商品的平均價(jià)格
select avg(price) from product where category_id = 'c002';
1、count函數(shù)對(duì)null值的處理
如果count函數(shù)的參數(shù)為星號(hào)(*),則統(tǒng)計(jì)所有記錄的個(gè)數(shù)。而如果參數(shù)為某字段,不統(tǒng)計(jì)含null值的記錄個(gè)數(shù)。
2、sum和avg函數(shù)對(duì)null值的處理
這兩個(gè)函數(shù)忽略null值的存在,就好象該條記錄不存在一樣。
3、max和min函數(shù)對(duì)null值的處理
?max和min兩個(gè)函數(shù)同樣忽略null值的存在。
分組查詢
分組查詢是指使用group by字句對(duì)查詢信息進(jìn)行分組
select 字段1,字段2… from 表名 group by 分組字段 having 分組條件;
-- 1 統(tǒng)計(jì)各個(gè)分類商品的個(gè)數(shù)
select category_id ,count(*) from product group by category_id ;
分頁(yè)查詢
-- 方式1-顯示前n條
select 字段1,字段2... from 表明 limit n
-- 方式2-分頁(yè)顯示
select 字段1,字段2... from 表明 limit m,n
m: 整數(shù),表示從第幾條索引開始,計(jì)算方式 (當(dāng)前頁(yè)-1)*每頁(yè)顯示條數(shù)
n: 整數(shù),表示查詢多少條數(shù)據(jù)
-- 查詢product表的前5條記錄
select * from product limit 5
-- 從第4條開始顯示,顯示5條
select * from product limit 3,5
Insert into select語(yǔ)句
將一張表的數(shù)據(jù)導(dǎo)入到另一張表中,可以使用INSERT INTO SELECT語(yǔ)句 。
insert into Table2(field1,field2,…) select value1,value2,… from Table1 或者:
insert into Table2 select * from Table1
要求目標(biāo)表Table2必須存在
將一張表的數(shù)據(jù)導(dǎo)入到另一張表中,有兩種選擇 SELECT INTO 和 INSERT INTO SELECT 。
SELECT vale1, value2 into Table2 from Table1
要求目標(biāo)表Table2不存在,因?yàn)樵诓迦霑r(shí)會(huì)自動(dòng)創(chuàng)建表Table2,并將Table1中指定字段數(shù)據(jù)復(fù)制到Table2中。
正則表達(dá)式
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-787321.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-787321.html
到了這里,關(guān)于MySQL數(shù)據(jù)庫(kù)基本操作的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!