MySQL进阶(DDL与DML)
目錄
1.DDL
1.1對庫的管理
1.2對表的操作
1.3常用的數(shù)據(jù)類型(補充)
1.4約束
2.DML
2.1.向表中插入數(shù)據(jù):(兩種方式)
2.2.修改語句:
2.3.刪除語句
2.4.delete? PK? ? truncate【面試題】
????????人生百味,世事無常,猶如多端的天氣,生活窘迫、工作壓抑,只不過是人生中的風雨罷了。陽光,總在風雨后只要你堅持著目標,堅持著自己的理想,總會在風雨過后,擁抱屬于自己的燦爛陽光。
前面講解了數(shù)據(jù)庫知識中,對表中的數(shù)據(jù)進行增刪改查,接下來將為大家介紹兩種新語法:DDL,DML它們是對庫和表進行操作。如果大家需要請自行收藏起來。
1.DDL
? ? ? ? DDL語言也就是數(shù)據(jù)庫定義語言,就是用來操作數(shù)據(jù)庫和對表的管理,比如對數(shù)據(jù)庫的增刪改查,表的增刪改查。
1.1對庫的管理
1.庫的創(chuàng)建:
創(chuàng)建數(shù)據(jù)庫并指定字符集: create database if not exists 數(shù)據(jù)庫名 character set 字符集名2.庫的查看:
查詢所有數(shù)據(jù)庫名稱: show databases;3.查詢或者修改某個數(shù)據(jù)庫的字符集:
查詢某個數(shù)據(jù)庫的字符集: show create database 數(shù)據(jù)庫名;修改數(shù)據(jù)庫字符集: alter database 數(shù)據(jù)庫名 character set 字符集名4.刪除數(shù)據(jù)庫:
刪除數(shù)據(jù)庫: drop database if exists 數(shù)據(jù)庫名;5.查看當前正在使用的數(shù)據(jù)庫:
查看當前正在使用的數(shù)據(jù)庫: select database()6.庫的使用:
use 數(shù)據(jù)庫名稱1.2對表的操作
1.創(chuàng)建表:
表的創(chuàng)建: create table 表名(字段名 數(shù)據(jù)類型 【字段約束】);2.查看當前庫中所有表:
查看當前庫中所有表: show tables ;3.查看表的結(jié)構(gòu):
desc 表名;4.修改表的名稱:
修改表名: alter table 表名 rename to 新的表名5.修改表的字符集:
alter table 表名 character set 字符集名6.添加列:
添加列: alter table add column 列名 數(shù)據(jù)類型 【約束】7.修改列的名稱和類型:
修改列名稱 類型: alter table 表名 change 列名 新列別 新數(shù)據(jù)類型;alter table 表名 modify 列名 新數(shù)據(jù)類型;8.刪除列和刪除表:
刪除列:alter table 表名 drop 列名;刪除表:drop table if exists 表名;1.3常用的數(shù)據(jù)類型(補充)
1.int 整型
2.double 小數(shù)類型
3.date 日期型:只包含年月日。yyyy-MM-dd
4.datetime 日期,包含年月日時分秒 yyyy-MM-dd HH:mm:ss
5.timestamp 時間搓類型 包含年月日時分秒?yyyy-MM-dd HH:mm:ss
注意:
????如果將來不給這個字段賦值,或賦值為null,則默認使用當前的系統(tǒng)時間,來自動賦值
6.varchar 字符串
1.4約束
1.概念
?對表中的數(shù)據(jù)進行限定,保證數(shù)據(jù)的正確性、有效性和完整性。
2.分類
1.主鍵約束?primary key
2.非空約束 not null
3.唯一約束unique
4.外鍵約束 foreign key
具體代碼實現(xiàn):
? ? ? ? 1.列級約束
用法: CREATE TABLE 表名(字段名 字段類型 約束,字段名 字段類型,表級約束);舉例: CREATE TABLE stuinfo(id INT PRIMARY KEY,stuname VARCHAR(20) NOT NULL,gender CHAR(1) CHECK(gender='男' OR gender='女'),seat INT UNIQUE,age INT DEFAULT 18,majorid INT REFERENCES major(id));? ? ? ? 2.表級約束
語法:在所有字段的最下面:constraint 約束名 約束類型 (字段名)舉例: CREATE TABLE stuinfo(id INT ,stuname VARCHAR(20),gender CHAR(1) ,seat INT,age INT ,majorid INT ,CONSTRAINT pk PRIMARY KEY(id),CONSTRAINT uq UNIQUE(seat),CONSTRAINT pk FOREIGN KEY(majorid) REFERENCES major(id)? 3.通用格式
CREATE TABLE 表名(id INT PRIMARY KEY,stuname VARCHAR(20) NOT NULL,gender CHAR(1) CHECK(gender='男' OR gender='女'),seat INT UNIQUE,age INT DEFAULT 18,majorid INT ,CONSTRAINT pk FOREIGN KEY(majorid) REFERENCES major(id)?這是創(chuàng)建表時,添加約束,當然修改表時依然能夠添加約束,這里簡單的提一下:
1.列級約束(不支持外鍵)
alter table 表名 modify column 字段名 ?字段類型 新約束
2.表級約束(非空,默認不支持)
alter table 表名 add ?【constraint 約束名】 約束類型(字段名)【外鍵引用】
?
4.修改表時刪除約束:
1.刪除非空約束 ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NULL2.刪除默認約束 ALTER TABLE stuinfo MODIFY COLUMN age INT 3.刪除主鍵 ALTER TABLE stuinfo DROP PRIMARY KEY;4.刪除唯一鍵ALTER TABLE stuinfo DROP INDEX seat ;5.刪除外鍵ALTER TABLE stuinfo DROP FOREIGN KEY(majorid) ;==================================================================================================================================================
補充:
? ? ? ? 標識列:?又叫自增長列
含義:可以不用手動的插入值,系統(tǒng)提供默認的序列值
特點:
1.標識列不一定和主鍵搭配,但要求是一個key
2.一個表至多一個
3.標識列的類型只能是數(shù)值型
4.標識列可以通過set auto_increment_increment=3設(shè)置步長
代碼實現(xiàn):
一.設(shè)置步長(一般不設(shè)置):SET auto_increment_increment=3;二.修改表時設(shè)置標識列:ALTER TABLE tab_id MODIFY COLUMN id INT PRIMARY KEY AUTO_INCREMENT;三.修改表時刪除標識列:ALTER TABLE tab_id MODIFY COLUMN id INT ;2.DML
?DML?是對數(shù)據(jù)庫的增刪改操作,即添加表中的數(shù)據(jù),刪除表中的數(shù)據(jù),修改表中的數(shù)據(jù)。
主要關(guān)鍵字,insert(添加),delete(刪除),update(修改)。
2.1.向表中插入數(shù)據(jù):(兩種方式)
語法一: insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n);舉例: INSERT INTO `beauty` VALUES(14,'劉哲銘','女','1990-12-12','189888888',NULL,2), (15,'吳寶生','女','1990-12-12','189888888',NULL,2); ================================================================= 語法二: insert into 表名 set 列名=值,列名=值......舉例: INSERT INTO `beauty` SET id=19,NAME='劉濤',phone='999';2.2.修改語句:
1.修改單表的記錄:update 表名 set 列=值,列=值...... where 篩選條件 例子: UPDATE `beauty` SET `phone`='321321' WHERE `name`='某某';2.修改多表的記錄(SQL99語法): update 表一 別名 inner |left|right| join 表二 別名 on 連接條件 set 列=值 where 篩選條件;例子: 修改張無忌的女朋友的手機號為11111:UPDATE `beauty` b INNER JOIN `boys` bo ON b.`boyfriend_id`=bo.`id` SET b.`phone`='111111111111111111' WHERE bo.`boyName`='張無忌';2.3.刪除語句
方式一:delete 語法: 單表的刪除:delete from 表名 where 篩選條件多表的刪除【補充】 sql92:delete 表一的別名 from 表一 別名 where 連接條件 and 篩選條件sql99: delete 表一的別名 ,表二的別名 from 表一 別名 inner | left | right| join 表二 別名 on 連接條件 where 篩選條件#方式二:truncate 清空數(shù)據(jù),刪除所有條件 truncate table 表名2.4.delete? PK? ? truncate【面試題】
1.delete 可以加where 條件,truncate不能加
2.truncate刪除,效率高一丟丟
3.加入說要刪除的表中有自增長列
如果用delete 刪除后。在插入數(shù)據(jù),自增長列的值從斷點開始,而truncate刪除后,在插入數(shù)據(jù)。自增長列的值從1開始。
4.truncate 刪除沒有返回值
5.truncate刪除不能回滾,delete刪除可以回滾
=========================================================================? ? ? ? 心靈毒雞湯:沒有一條路是平坦的,沒有一座山是毫無崎嶇的,而大海更不會是風平浪靜的。人生之路,荊棘遍地,坎坷泥濘不可計數(shù),唯有堅強者才能披荊斬棘,掃平坎坷走到路的盡頭 。? ? ??
總結(jié)
以上是生活随笔為你收集整理的MySQL进阶(DDL与DML)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: go int 转切片_DW-Go语言编程
- 下一篇: java按照商品价格排序_按照指定的类型