MYsql 怎么約束列的取值范圍

海州網站制作公司哪家好,找創新互聯公司!從網頁設計、網站建設、微信開發、APP開發、成都響應式網站建設公司等網站項目制作,到程序開發,運營維護。創新互聯公司自2013年創立以來到現在10年的時間,我們擁有了豐富的建站經驗和運維經驗,來保證我們的工作的順利進行。專注于網站建設就選創新互聯公司。
一般是建立check約束。例如設置sex一列取值只能為'男'或'女' 建表tab10時命令為create table tabl0 (sex char(2) check(sex in ('男','女'))..
主鍵約束:唯一,不重復,不能為空? primary key
一個表中有且只有一個主鍵約束
1.創建表的同時創建主鍵約束
格式一:
create table 表名(
列名1? 數據類型 primary key,
列名2 數據類型
);
主鍵約束名字的寫法: PK_列名
格式二:
create table 表名(
列名1 數據類型,
列名2 數據類型,
constraint? 主鍵約束的名字? primary key(列名1)
);
格式三:
create table 表名(
列名1 數據類型,
列名2 數據類型,
primary key(列名1)
);
2.針對已經存在的表,添加主鍵約束
格式一:
alter table 表名 modify 列名 數據類型 primary key;
格式二:
alter table 表名 add primary key(列名);
格式三:
alter table 表名 add constraint 主鍵約束的名字 primary key(列名);
3.刪除主鍵約束
格式:alter table 表名 drop primary key;
#常見的數據類型
/*
數值型:
整形
小數:
? ? 定點數
? ? 浮點數
字符型:
較短的文本:char、varchar
較長的文本:text、blob(較長的二進制數據)
日期型:
*/
#一、整形
/*
分類:
tinyint、smallint、mediumint、int/integer、bigint
1 ? ? ? ? ? ?2 ? ? ? ? ? ? ? ?3 ? ? ? ? ? ? ? ? ? ? ? ?4 ? ? ? ? ? ? ? ?8
特點:
-如果不設置無符號還是有符號,默認是有符號,如果想設置無符號,需要添加unsigned關鍵字
-如果插入的數值超出了整形的范圍,會報out of range異常,并且插入臨界值
-如果不設置長度,會有默認的長度
-長度代表了顯示的最大寬度,如果不夠會用0在左邊填充,但是必須搭配zerofill使用
*/
#1.如何設置無符號和有符號
CREATE TABLE tab_int(
t1 INT
t2 INT ZEROFILL ?【無符號】
);
#二、小數
/*
浮點型
float(M, D)
double(M, D)
定點型
dec(M, D)
decimal(M, D)
特點:
-M:整數部位+小數部位
-D:小數部位
-M和D都可以省略
如果是decimal,則M默認為10,D默認為0
如果是float和double,則會根據插入的數值的精度來決定精度
定點型的精確度較高,如果要求插入數值的精度較高如貨幣運算等則考慮使用
*/
CREATE TABLE tab_float (
f1 FLOAT(5, 2)
f2 DOUBLE (5, 2)
f3 DECIMAL(5, 2)
)
#原則:
/*
所選擇的類型越簡單越好,能保存數值的類型越小越好
*/
#三、字符型
/*
較短的文本:
char
varchar
較長的文本:
text
blob(較大的二進制)
特點:
? ? ? ? ? ? ? ? 寫法 ? ? ? ? ? ? ? ?M的意思 ? ? ? ? ? ? ????????????????????????????特點 ? ? ? ? ? ? ? ? ? ????空間的耗費 ? ? ? ? ? ? ? ? ? ?效率????????
char ? ? ? ? ? ?char(M) ? ? ? 最大的字符數,可以省略 ? ? ? ? 固定長度的字符 ? ?????????比較耗費 ? ? ? ? ? ? ? ? ? ? ? ?高
varchar ? ? ?carchar(M) ? ?最大的字符數,不可以省略 ? ?可變長度的字符 ? ? ? ? ? ?比較節省 ? ? ? ? ? ? ? ? ? ? ? ?低
*/
CREATE TABLE tab_char(
c1 ENUM('a','b','c')
)
CREATE TABLE tab_set(
s1 ? ?SET ('a','b','c','d')
)
#四、日期型
特點:
? ? ? ? ? ? ? ? ?字節? ? ? ? ? ? ? ? ? ? ? ? 范圍? ? ? ? ? ? ? ? ? ? 時區等的影響
datetime? ? ? ? ? ? ? ? ? ? ? ? ? 8? ? ? ? ? ? ? ? ? ? ? ? ? ? 10000-9999? ? ? ? ? ? 不受
timestamp? ? ? ? ? ? ? ? ? ? ? ? 4? ? ? ? ? ? ? ? ? ? ? ? 1970-2038? ? ? ? ? ? ? ? ? ? 受
CREATE TABLE tab_date(
t1? ? DATETIME,
t2? ? TIMESTAMP
)
#常見約束
/*
含義:一種限制,用于限制表中的數據,為了保證表中的數據的準確和可靠性
分類:六大約束
NOT NULL:非空,用于保證該字段的值不能為空,比如姓名、學號等
default:默認,用于保證該字段有默認值,比如性別
primary key:主鍵,用于保證該字段的值具有唯一性,并且非空,比如學號等
unique:唯一,用于保證該字段的值具有唯一性,可以為空,比如座位號
check:檢查約束【mysql中不支持】,比如年齡、性別
foreign key:外鍵,用于限制兩個表的關系,用于保證該字段的值必須來自于主表的關聯列的值,在從表添加外鍵約束,用于引用主表中某列的值,比如員工表的部門編號,員工表的工種編號
添加約束的時機:
1.創建表時
2.修改表時
約束的添加分類:
列級約束:
? ? 六大約束語法上都支持,但外鍵約束沒有效果
表級約束:
? ? 除了非空、默認,其他的都支持
*/
CREATE TABLE 表名(
字段名? ? 字段類型? ? 列級約束,
表級約束
)
#一、創建表時添加約束
/*
語法:
直接在字段名和類型后面追加 約束類型即可
只支持:
*/
#1.添加列級約束
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 foreign key references major (id)? #外鍵
)
create table major (
id int primary key,
majorName? varchar (20)
)
desc stuinfo? ?#查看表結構
show index from stuinfo? #查看stuinfo表中所有的索引,包括主鍵、外鍵、唯一
#2、添加表級約束
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? ck check (gender = '男' or gender = '女'),? ?#檢查
constraint? fk_stuinfo_major foreign key(majorid) references major(id)? #外鍵
)
mysql這個列級權限用GRANT怎么寫
grant 權限 on 數據庫對象 to 用戶
一、grant 普通數據用戶,查詢、插入、更新、刪除 數據庫中所有表數據的權利。
grant select on testdb.* to common_user@’%’
grant insert on testdb.* to common_user@’%’
grant update on testdb.* to common_user@’%’
grant delete on testdb.* to common_user@'%'
或者
grant select, insert, update, delete on testdb.* to common_user@’%’
本文題目:mysql怎么寫列級約束 sql列級約束
標題來源:http://www.yijiale78.com/article6/ddgscog.html
成都網站建設公司_創新互聯,為您提供網站排名、關鍵詞優化、手機網站建設、用戶體驗、Google、網站改版
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯