Mysql-02-建立表,約束,修改表的結構等
Mysql-02-建立表,約束,修改表的結構等
文章目錄
- 建立資料庫並設定編碼格式
create database testmy charset utf8
create database if not exists testmy charset utf8
- 刪除資料庫
drop database name;
- 修改資料庫字符集
alter databases testmy charset gbk
查詢資料庫
show databases
設計表:
表中有以下約束
表的欄位
欄位資料型別和長度
約束
設計表資料型別
char(n) 長度為n的字串
varchar(n) 最大長度為n的可變長字串
date 日期 包含年月日
datetime 時間 時分秒
整數
TINYINT | 1 | -128 | 127 |
---|---|---|---|
SMALLINT | 2 | -32768 | 32767 |
MEDIUMINT | 3 | -8388608 | 8388607 |
INT | 4 | -2147483648 | 2147483647 |
BIGINT | 8 | -9223372036854775808 | 9223372036854775807 |
浮點數
型別 | 位元組 |
---|---|
float | 4 |
double | 8 |
資料型別(M,D)
M:精度,資料的總長度;
D:標度,小數點後的長度
Float(6,2)、Double(6,2)
BOLB用於儲存圖片視訊
BOLB是一個二進位制大物件,可以容納可變數的資料,用於儲存圖片視訊等資訊
有四種BLOB型別: tinyBLOB BLOB mediumBLOB 和longBLOB,他們只是可以容納的最大長度不同
主鍵:
- 在一張表中代表唯一的一條記錄,不能為空,不能重複
約束
-
primary key 設定主鍵約束
-
not null 不能為空
-
unique 唯一鍵
-
defaulit 預設值
comment 註釋
主鍵的自動增長
- AUTO_INCREMENT
預設值
- DEFAULT default_value
建立表語法:
CREATE TABLE 表名(列名 資料型別 [約束] [預設值] [ 註釋],…)
CREATE TABLE t_student(
stu_num INT,
stu_name VARCHAR(10),
stu_sex CHAR(1),
stu_birthday DATE,
stu_score FLOAT(4,1),
stu_phone VARCHAR(11),
stu_reg_time DATETIME
)
#刪除表
DROP TABLE t_student
刪除表:
drop table 表名
修改表
rename table 舊錶名 to 新表名
複製表名
create table 新表名 like 被複制的表名
建立表: 新增約束
主鍵約束 primary key 表示唯一的一條記錄 不能為空 不能重複
不能為空 not null
唯一約束 unique
檢察約束 chaeck()
主鍵自動增長 AUTO_INCREMENT 主鍵必須為整數
方式1 在列後面直接新增
# 方式1 在列後面直接新增
CREATE TABLE t_student(
stu_num INT PRIMARY KEY COMMENT '主鍵',
stu_name VARCHAR(10) NOT NULL COMMENT '姓名',
stu_sex CHAR(1) DEFAULT '男',# 預設值
stu_birth DATE ,
stu_score FLOAT(4,1) CHECK(stu_score<=100), # 插入條件
stu_phone VARCHAR(11) NOT NULL UNIQUE, #NOT NULL 不能為空 UNIQUE唯一
stu_reg_time DATETIME
)
DROP TABLE t_student; # 刪除表
方式2將約束新增在後面
# 方式2將約束新增在後面
CREATE TABLE t_student(
stu_num INT COMMENT '主鍵',
stu_name VARCHAR(10) COMMENT '姓名',
stu_sex CHAR(1) DEFAULT '男',# 預設值
stu_birth DATE ,
stu_score FLOAT(4,1) CHECK(stu_score<=100), # 插入條件
stu_phone VARCHAR(11) NOT NULL UNIQUE, #NOT NULL 不能為空 UNIQUE唯一
stu_reg_time DATETIME,
CONSTRAINT num_pk PRIMARY KEY(stu_num),
CONSTRAINT score_check CHECK(stu_score<=100),,
CONSTRAINT phone UNIQUE(stu_phone)
)
修改表結構
新增主鍵約束
ALTER TABLE 表名 ADD PRIMARY KEY(列名)
ALTER TABLE 表名 DROP PRIMARY KEY
設定自動增長
ALTER TABLE 表名 MODIFY 列名 型別 AUTO_INCREMENT;
ALTER TABLE users MODIFY 列名 型別 AUTO_INCREMENT;
設定不能為空
ALTER TABLE 表名 MODIFY 列名 型別 NOT NULL;
ALTER TABLE 表名 CHANGE COLUMN 列名 列名 型別 NULL;
新增唯一約束
ALTER TABLE 表名 ADD UNIQUE(列名)
ALTER TABLE 表名 DROP INDEX 索引名;
新增檢查約束
ALTER TABLE 表名 ADD CONSTRAINT 約束名 CHECK(條件)
ALTER TABLE 表名 DROP CHECK 約束名;
新增列
ALTER TABLE 表名 ADD 列名 資料型別
ALTER TABLE 表名 ADD 列名 資料型別 FIRST
ALTER TABLE 表名 ADD 列名 資料型別 AFTER 列名
刪除列
ALTER TABLE 表名 DROP 列名
修改列名
ALTER TABLE 表名 CHANGE 舊列名 新列名 資料型別
修改列的資料型別
ALTER TABLE 表名 MODIFY 列名 新資料型別
相關程式碼
#修改表名
RENAME TABLE `t_student` TO student;
# 複製表
CREATE TABLE 新表名 LIKE 被複制的表名
CREATE TABLE student1(
stu_num INT,
stu_name VARCHAR(10),
stu_sex CHAR(1),
stu_birth DATE,
stu_score FLOAT(4,1),
stu_phone VARCHAR(11),
stu_reg_time DATETIME
)
/*
新增主鍵約束
Alter table 表名 add primary key(列名)
ALTER TABLE 表名 DROP PRIMARY KEY
*/
ALTER TABLE student1 ADD CONSTRAINT num_pk PRIMARY KEY(stu_num)
ALTER TABLE student1 DROP PRIMARY KEY
/*
設定自動增長
slter table 表名 modify 列名 型別 AUTO_INCREMENT;
*/
ALTER TABLE student1 MODIFY stu_num INT AUTO_INCREMENT;
#設定列表不能為空
ALTER TABLE student1 MODIFY stu_name VARCHAR(10) NOT NULL;
#設定列表可以為空
ALTER TABLE student1 CHANGE COLLATE stu_name stu_name VARCHAR(10) NULL;
#新增唯一約束
ALTER TABLE student1 ADD UNIQUE(stu_phone)
ALTER TABLE student1 DROP INDEX stu_phone;
#新增檢查約束
#ALTER TABLE 表名 ADD CONSTRAINT 約束名 CHECK(條件)
#ALTER TABLE 表名 DROP CHECK 約束名;
ALTER TABLE student1 ADD CONSTRAINT score_check CHECK(stu_score<=100)
ALTER TABLE student1 DROP CHECK score_check;
#新增列名
#alter table 表名 add 列名 資料型別
ALTER TABLE student1 ADD COLUMN address VARCHAR(50)
ALTER TABLE student1 ADD COLUMN address VARCHAR(50) FIRST
ALTER TABLE student1 ADD COLUMN address VARCHAR(50) AFTER stu_sex
# 刪除列
ALTER TABLE student1 DROP COLUMN address;
#修改列名 ALTER TABLE 表名 CHANGE 舊列名 新列名 資料型別
ALTER TABLE student1 CHANGE address stu_address VARCHAR(50)
#修改列的資料型別
#ALTER TABLE 表名 MODIFY 列名 新資料型別
ALTER TABLE student1 MODIFY stu_phone INT