Mysql数据库和数据表的创建和信息更改的常用指令
文章目錄
- 數(shù)據(jù)庫和數(shù)據(jù)表的創(chuàng)建和信息更改
- 后續(xù)小實驗做準(zhǔn)備
- 一. 關(guān)于數(shù)據(jù)庫和數(shù)據(jù)表的其它操作
- 1)數(shù)據(jù)庫
- ①創(chuàng)建數(shù)據(jù)庫
- ②顯示目前所有的數(shù)據(jù)庫
- ③數(shù)據(jù)庫重命名
- 2.1 先創(chuàng)建新庫:
- 2.2 使用`RENAME TABLE` 命令修改表名,將表移動到新的庫里:
- 2.3 完成后刪除舊庫:
- ④更改當(dāng)前使用的數(shù)據(jù)庫
- ⑤更改當(dāng)前使用的數(shù)據(jù)庫
- 2)數(shù)據(jù)表
- ①數(shù)據(jù)表的創(chuàng)建
- 字段數(shù)據(jù)類型
- 字段設(shè)置
- ②數(shù)據(jù)表信息修改
- a. 修改表名
- b. 增加或刪除或修改列
- d. 獲取表的基本信息
- ③數(shù)據(jù)表信息修改
數(shù)據(jù)庫和數(shù)據(jù)表的創(chuàng)建和信息更改
后續(xù)小實驗做準(zhǔn)備
創(chuàng)建數(shù)據(jù)庫
語句:
create database experiment;通過:show databases;查看創(chuàng)建結(jié)果
創(chuàng)建基本表
創(chuàng)建基本表時,為不同的列選擇合適的數(shù)據(jù)類型,正確創(chuàng)建表級和列級完整性約束,如列值是否允許為空、主碼和外碼等。
創(chuàng)建表的代碼如下:
-
student表
create table student (sno char(9) primary key, sname char(20) unique, ssex char(2), sage smallint, sdept char(20)); -
course表
create table course (sno char(4) primary key, cname char(40) not null, cpno char(4), ccredit smallint, foreign key(cpno) references course(cno)); -
SC表
create table SC (Sno char(9), Cno char(4), Grade smallint, primary key(Sno,Cno), foreign key(Sno) references Student(Sno), foreign key(Cno) references Course(Cno));
查看創(chuàng)建表的就結(jié)果
上面創(chuàng)建SC的時候?qū)傩允谴髮戦_頭,二student表和cource表中的全是小寫,創(chuàng)建成功,說明win10下mysql不區(qū)分大小寫
向基本表中加入數(shù)據(jù)
student表數(shù)據(jù)隨便輸,course表中有坑,因為course表的參照表是自身,所以要先輸入需要的先行課程,CS表依賴student表和course表。最后輸入。
-
student
-
course表
向輸入cpno為null的元組,再選擇cpno為已經(jīng)輸入元組cno值相同的元組輸入。不然會出現(xiàn)參照不完整的報錯。
-
CS表
這個表的數(shù)據(jù)是查看cource表和student表中的數(shù)據(jù)
一. 關(guān)于數(shù)據(jù)庫和數(shù)據(jù)表的其它操作
1)數(shù)據(jù)庫
①創(chuàng)建數(shù)據(jù)庫
create database 數(shù)據(jù)庫名;
②顯示目前所有的數(shù)據(jù)庫
show databases
③數(shù)據(jù)庫重命名
rename database olddbname to newdbname
MySQL 5.1.23 之前的舊版本中,我們可以使用 RENAME DATABASE來重命名數(shù)據(jù)庫,但此后版本,因為安全考慮,刪掉了這一條命令。
大于這個版本修改數(shù)據(jù)庫名字基本上是不行的,采用新建數(shù)據(jù)庫,然后進行數(shù)據(jù)遷移。
2.1 先創(chuàng)建新庫:
create database new_db;2.2 使用RENAME TABLE 命令修改表名,將表移動到新的庫里:
rename table old_db.tb to new_db.tb;2.3 完成后刪除舊庫:
drop database old_db;上面的方法是通過重命名表的方式實現(xiàn)數(shù)據(jù)遷移。
也可以使用dump工具導(dǎo)出數(shù)據(jù)庫的sql文件,更改數(shù)據(jù)庫sql文件中創(chuàng)建數(shù)據(jù)庫的名字。再用source指令引入sql文件實現(xiàn)數(shù)據(jù)庫的數(shù)據(jù)遷移。
④更改當(dāng)前使用的數(shù)據(jù)庫
use 數(shù)據(jù)庫名字
⑤更改當(dāng)前使用的數(shù)據(jù)庫
drop database 數(shù)據(jù)庫名
2)數(shù)據(jù)表
①數(shù)據(jù)表的創(chuàng)建
create table <表名> (<列名><數(shù)據(jù)類型>[列級約束條件],<列名><數(shù)據(jù)類型>[列級約束條件], [表級約束條件])列級約束:只能應(yīng)用于一列上。
表級約束 :可以應(yīng)用于一列上,也可以應(yīng)用在一個表中的多個列上。
字段數(shù)據(jù)類型
字段設(shè)置
主鍵: 被設(shè)置為主鍵的列,值不能為空,且列中不能出現(xiàn)重復(fù)的值
外鍵: 被設(shè)置成外碼的列,值只能是參考列值中的數(shù)據(jù),可以為空(在沒有設(shè)置該列只非空的情況下)
這里不說那些上面約束條件,太抽象,只說怎么設(shè)置列的屬性。
-
列值不能為空
<列名><屬性值> not null
-
設(shè)置列為主鍵
主鍵不能為空,被設(shè)置為主鍵的列值不能重復(fù)
-
只有一個主鍵是可以直接
<列名><屬性值> primary key標(biāo)識主鍵
course中的sno為主鍵 -
多個主鍵時需要在創(chuàng)建表的末尾添加主鍵信息
這里SC表中Sno和Cno為主鍵
-
創(chuàng)建表后追加主鍵
alter TABLE <表名> MODIFY <列名> <列的數(shù)據(jù)類型> PRIMARY KEY
-
-
設(shè)置為外鍵
外鍵必須是參照表的某個key,可以說主鍵(primary key)也可以是唯一鍵(unique key)
有外鍵時創(chuàng)建數(shù)據(jù)表,必須要先創(chuàng)建出被參考的表,不然會報錯
-
在創(chuàng)建時設(shè)置
FOREIGN KEY (<外鍵>) REFERENCES <被參考的數(shù)據(jù)表>(<被參考的列>)
這里外鍵是cpno,參考的列的course表中的cno列,cpno列的值只能是cno列中出現(xiàn)過的值,不然會報錯
多個外鍵 :
-
在創(chuàng)建表后追加
-- 已存在表增加外鍵 ALTER TABLE Products ADD FOREIGN KEY products_vendors_fk_1 (vend_id) REFERENCES Vendors (vend_id); -
外鍵的約束模式
-
RESTRICT
嚴(yán)格模式(默認(rèn)的),**父表不能刪除或者更新一個已經(jīng)被子表引用的記錄數(shù)據(jù)(**外鍵對應(yīng)的父表被引用的字段,其他字段可以更改)。即,當(dāng)父表字段數(shù)據(jù)已經(jīng)被子表引用時,不能再刪除或者更新父表被引用的字段數(shù)據(jù)。
-
Cascade
級聯(lián)模式;針對父表的操作,對應(yīng)子表關(guān)聯(lián)的數(shù)據(jù)也跟著被操作。
- 更新父表被引用的字段,如果該數(shù)據(jù)被子表外鍵使用,則子表外鍵隨之更新;
- 刪除父表被引用的字段記錄,如果該數(shù)據(jù)被子表外鍵使用,子表對應(yīng)外鍵所屬記錄隨之刪除。
-
Set null
置空模式,父表字段操作之后,如果該數(shù)據(jù)被子表外鍵使用,子表對應(yīng)的外鍵字段被置空。
外鍵置空的前提是對應(yīng)字段允許為空,否則外鍵創(chuàng)建不成功。
刪除的時候子表置空,更新的時候子表級聯(lián):
-
-
-
自動增長
自增列只能有一個,并且必須設(shè)置為key如果沒有指定就取當(dāng)前id最大值+1,如果指定了就直接插入或者更新數(shù)據(jù)子
自增值在數(shù)據(jù)庫操作失敗后也會發(fā)生改變,從而影響后續(xù)自增列的值
<列名><屬性值> auto_increment
- 如果有多個自增列會報錯
在IDEA可視化工具中創(chuàng)建多個自增列出現(xiàn)報錯
-
自增鍵自增詳解
自增值修改機制
假設(shè)數(shù)據(jù)表當(dāng)前的自增值是 Y,在插入一行數(shù)據(jù)的時候,數(shù)據(jù)庫的執(zhí)行情況如下:
- 如果插入數(shù)據(jù)時自增字段指定了具體的值 X,就直接使用值 X 填到該自增字段,該表的自增值是否修改的判斷如下:
- 若 X<Y,則該表的自增值不變;
- 若 X≥Y,則需要修改該表的自增值為 X + auto_increment_increment(步長)。
- 如果插入數(shù)據(jù)時自增字段未指定值或指定為 0、null,則把該表當(dāng)前的自增值(即 Y)填到自增字段,并修改該表的自增值為 Y + auto_increment_increment(步長)。
實際上,MySQL 維護著兩個系統(tǒng)參數(shù):auto_increment_offset 和 auto_increment_increment,分別用來表示自增的初始值和步長,默認(rèn)值都為 1。MySQL 修改數(shù)據(jù)表自增值是從 auto_increment_offset 開始,以 auto_increment_increment 為步長,持續(xù)疊加,直到找到第一個大于 X 的值,作為新的自增值。
自增值的修改時機
**數(shù)據(jù)表的自增值修改實際上是在真正插入數(shù)據(jù)的操作之前。如果沒有插入成功,MySQL 也不會將自增值再改回去。也就是說,自增主鍵有可能會出現(xiàn)不連續(xù)的情況。**比如在插入數(shù)據(jù)時出錯(如違反唯一鍵約束),或者事務(wù)回滾的情況下,都會導(dǎo)致自增主鍵不連續(xù)。
- 如果插入數(shù)據(jù)時自增字段指定了具體的值 X,就直接使用值 X 填到該自增字段,該表的自增值是否修改的判斷如下:
-
設(shè)置自增鍵的初始值
-
自增列的自增步長是可以改變的, 不常用所以不贅述了。
-
列中的值唯一
一張表往往有很多字段需要唯一性,數(shù)據(jù)不能重復(fù);但是一張表只能有一個字段為主鍵,那么唯一鍵(unique key),就可以解決表中有多個字段需要唯一性約束的問題。
使用unique key標(biāo)識
-
插入列數(shù)據(jù)前進行條件檢查
check(列值需要符合的條件),符和條件時插入數(shù)據(jù)。當(dāng)插入的數(shù)據(jù)符合列的條件時插入數(shù)據(jù)
②數(shù)據(jù)表信息修改
a. 修改表名
? alter table 表名 rename 新表名
b. 增加或刪除或修改列
-
增加
ALTER TABLE table ADD [COLUMN] column_name_1 column_1_definition [FIRST|AFTER existing_column], ADD [COLUMN] column_name_2 column_2_definition [FIRST|AFTER existing_column], ···;
-
刪除
ALTER TABLE <表名> DROP COLUMN column_1, DROP COLUMN column_2,
-
修改列
- 修改列名
- 還可以設(shè)置列的默認(rèn)值,是否是主鍵,唯一鍵,外碼等
d. 獲取表的基本信息
show columns from <表名>
③數(shù)據(jù)表信息修改
drop table 表名
總結(jié)
以上是生活随笔為你收集整理的Mysql数据库和数据表的创建和信息更改的常用指令的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: kali永久获取root权限
- 下一篇: c语言e怎么表示_如何一个月学完c语言