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