日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

mysql约束类型 A P_mysql笔记: 数据类型、约束、范式

發(fā)布時(shí)間:2025/3/15 数据库 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql约束类型 A P_mysql笔记: 数据类型、约束、范式 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

登陸mysql

# mysql -uroot -p123456

# 顯示數(shù)據(jù)庫(kù)

SHOW DATABASES;

# 創(chuàng)建數(shù)據(jù)庫(kù)

CREATE DATABASE test;

# 顯示數(shù)據(jù)庫(kù)中的表

SHOW TABLES;

# 創(chuàng)建pet表

CREATE TABLE pets (

name VARCHAR(20),

owner VARCHAR(20),

species VARCHAR(20),

sex CHAR(1),

birth DATE,

death DATE

) character set = utf8;

# 顯示表結(jié)構(gòu)

DESC?pets;

#?插入數(shù)據(jù)

INSERT INTO?pets?VALUES?('旺財(cái)2',?'周星馳2',?'a',?'a',?'1990-01-01',?NULL);

INSERT INTO?pets?VALUES?('旺財(cái)3',?'周星馳3',?'b',?'b',?'1990-01-01',?NULL);

INSERT INTO?pets?VALUES?('旺財(cái)4',?'周星馳4',?'c',?'c',?'1990-01-01',?NULL);

INSERT INTO?pets?VALUES?('旺財(cái)5',?'周星馳5',?'d',?'d',?'1990-01-01',?NULL);

INSERT INTO?pets?VALUES?('旺財(cái)6',?'周星馳6',?'e',?'e',?'1990-01-01',?NULL);

INSERT INTO?pets?VALUES?('旺財(cái)7',?'周星馳7',?'f',?'f',?'1990-01-01',?NULL);

INSERT INTO?pets?VALUES?('旺財(cái)8',?'周星馳8',?'g',?'g',?'1990-01-01',?NULL);

# 查詢

SELECT * FROM pets;

#?刪除數(shù)據(jù)

DELETE FROM?pets?WHERE?name='旺財(cái)2';

#?修改數(shù)據(jù)

UPDATE?pets?SET?name='旺旺財(cái)'?WHERE?owner='周星星';

常用數(shù)據(jù)類型

# 數(shù)值

# TINYINT ? ? ? ? ?1 字節(jié) ? ?小整數(shù)值

# # SMALLINT ? ? ? 2 字節(jié) ? ?大整數(shù)值

# MEDIUMINT ? ? ? ?3 字節(jié) ? ?大整數(shù)值

# INT或INTEGER ?4 字節(jié) ? ?大整數(shù)值

# BIGINT ? ? ? ? ?8 字節(jié) ? ?極大整數(shù)值

# FLOAT ? ? ? ? ? ?4 字節(jié) ? ?單精度

# DOUBLE ? ? ? ? ? 8 字節(jié) ? ?雙精度

# DECIMAL ?對(duì)DECIMAL(M,D) ,如果M>D,為M+2否則為D+2

# 日期/時(shí)間

# DATE 3 ?1000-01-01/9999-12-31 ?YYYY-MM-DD 日期值

# TIME 3 ?'-838:59:59'/'838:59:59' ? HH:MM:SS ? 時(shí)間值或持續(xù)時(shí)間

# YEAR 1 ?1901/2155 ?YYYY ? 年份值

# DATETIME 8 ?1000-01-01 00:00:00/9999-12-31 23:59:59 ? ?YYYY-MM-DD HH:MM:SS ? ?混合日期和時(shí)間值

# TIMESTAMP ? ?4 ? 1970-01-01 00:00:00/2038 ? ?結(jié)束時(shí)間是第 2147483647 秒

# ? ? ? ? 北京時(shí)間 2038-1-19 11:14:07,格林尼治時(shí)間 2038年1月19日 凌晨 03:14:07

# ? ? ? ? YYYYMMDD HHMMSS 混合日期和時(shí)間值,時(shí)間戳

# 字符串

# CHAR 0-255字節(jié) ? ?定長(zhǎng)字符串

# VARCHAR ?0-65535 字節(jié) 變長(zhǎng)字符串

# TINYBLOB 0-255字節(jié) ? ?不超過(guò) 255 個(gè)字符的二進(jìn)制字符串

# TINYTEXT 0-255字節(jié) ? ?短文本字符串

# BLOB 0-65 535字節(jié) 二進(jìn)制形式的長(zhǎng)文本數(shù)據(jù)

# TEXT 0-65 535字節(jié) 長(zhǎng)文本數(shù)據(jù)

# MEDIUMBLOB ? 0-16 777 215字節(jié) 二進(jìn)制形式的中等長(zhǎng)度文本數(shù)據(jù)

# MEDIUMTEXT ? 0-16 777 215字節(jié) 中等長(zhǎng)度文本數(shù)據(jù)

# LONGBLOB 0-4 294 967 295字節(jié) ?二進(jìn)制形式的極大文本數(shù)據(jù)

# LONGTEXT 0-4 294 967 295字節(jié) ?極大文本數(shù)據(jù)

mysql建立表約束

# 主鍵約束

CREATE table user (

id int primary key,

name varchar(20)

) character set = utf8;

INSERT INTO user values(1, '張三');

# 聯(lián)合主鍵

# id和name在一起不重復(fù)就行

CREATE table user2 (

id int,

name varchar(20),

password varchar(20),

primary key (id, name)

) character set = utf8;

INSERT into user2 values (1, '張三', '123');

INSERT into user2 values (2, '張三', '123');

INSERT into user2 values (1, '李四', '123');

# id 和 name與第一項(xiàng)相同

INSERT into user2 values (1, '張三', '123');

# 聯(lián)合組件任何一項(xiàng)都不能為NULL

INSERT into user2 values (NULL, '張三', '123');

# 自增約束

CREATE table user3 (

id int primary key auto_increment,

name varchar(20)

) character set = utf8;

INSERT INTO user3 (name) values ('張三'); # 連續(xù)執(zhí)行三次

# 忘記創(chuàng)建組件約束的情況

CREATE table user4 (

id int,

name varchar(20)

) character set = utf8;

ALTER table user4 add primary key auto_increment(id); # 補(bǔ)充添加自增主鍵約束

ALTER table user4 drop primary key; # 刪除主鍵約束

ALTER table user4 modify id int primary key auto_increment; # 修改某一個(gè)字段為自增主鍵

desc user4;

# 唯一約束

# 約束該字段的值不能重復(fù)

CREATE table user5 (

id int,

name varchar(20)

) character set = utf8;

alter table user5 add unique(name);

INSERT into user5 (name) values ('張三'); # 連續(xù)執(zhí)行兩次

CREATE table user6 (

id int,

name varchar(20),

unique(name)

) character set = utf8;

CREATE table user7 (

id int,

name varchar(20) unique

) character set = utf8;

# 聯(lián)合唯一約束

CREATE table user8 (

id int,

name varchar(20),

unique(id, name)

) character set = utf8;

# 刪除唯一約束

alter table user7 drop index name;

# 添加唯一約束

alter table user7 modify name varchar(20) unique;

# 非空約束

CREATE table user9 (

id int,

name varchar(20) not null

) character set = utf8;

# 默認(rèn)約束

# 當(dāng)我們插入字段的時(shí)候,如果沒有傳值,就會(huì)用默認(rèn)約束

CREATE table user10 (

id int,

name varchar(20) not null,

age int default 10

) character set = utf8;

# 外鍵約束

# 涉及到兩個(gè)表:父表、子表

CREATE table classes(

id int primary key,

name varchar(20)

) character set = utf8;

CREATE table students(

id int primary key,

name varchar(20),

class_id int,

foreign key(class_id) references classes(id)

) character set = utf8;

INSERT INTO classes values (1, '一班');

INSERT INTO classes values (2, '二班');

INSERT INTO classes values (3, '三班');

INSERT INTO classes values (4, '四班');

INSERT INTO students values (1001, '張三', 1);

INSERT INTO students values (1002, '李四', 2);

INSERT INTO students values (1003, '王五', 3);

INSERT INTO students values (1004, '趙六', 4);

# id 為5的班級(jí)不存在,所以報(bào)錯(cuò)

INSERT INTO students values (1005, '錢七', 5);

# 不能刪除父表中的數(shù)據(jù),因?yàn)檫@個(gè)數(shù)據(jù)子表要關(guān)聯(lián)

DELETE FROM classes WHERE id = 4;

數(shù)據(jù)庫(kù)的三大設(shè)計(jì)范式

# 1NF: 數(shù)據(jù)表中的所有字段都是不可分割的原子值?

CREATE table student2 (

id int primary key,

name varchar(20),

address varchar(30)

) character set = utf8;

INSERT INTO student2 VALUES(1, '張三', '中國(guó)遼寧省沈陽(yáng)市高新區(qū)...');

INSERT INTO student2 VALUES(2, '李四', '中國(guó)吉林省長(zhǎng)春市高新區(qū)...');

INSERT INTO student2 VALUES(3, '王五', '中國(guó)黑龍江省哈爾濱市高新區(qū)...');

# 中國(guó)遼寧省沈陽(yáng)高新區(qū)... 這個(gè)字段值是可以繼續(xù)拆分的:中國(guó)=>遼寧省=>沈陽(yáng)市=>高新區(qū)...

# 修改后

CREATE table student3 (

id int primary key,

name varchar(20),

country varchar(20),

province varchar(20),

city varchar(20),

detail varchar(60)

) character set = utf8;

INSERT INTO student3 VALUES(1, '張三', '中國(guó)', '遼寧省', '沈陽(yáng)市', '高新區(qū)...');

INSERT INTO student3 VALUES(2, '李四', '中國(guó)', '吉林省', '長(zhǎng)春市',' 高新區(qū)...');

INSERT INTO student3 VALUES(3, '王五', '中國(guó)', '黑龍江省', '哈爾濱市', '高新區(qū)...');

# 設(shè)計(jì)的越詳細(xì),對(duì)于某些實(shí)際操作可能越好,但是不一定都是好處

# 具體要根據(jù)項(xiàng)目的需求而定

# 2NF:必須滿足1NF的前提下,除主鍵外的第一列都必須滿足依賴與主鍵。

# 如果要出現(xiàn)不完全依賴,只可能發(fā)生在聯(lián)合主鍵的情況下。

CREATE TABLE orders(

product_id int,

customer_id int,

product_name varchar(20),

customer_name varchar(20),

primary key(product_id, customer_id)

) character set = utf8;

# 問(wèn)題?

# 除主鍵以外的其他列,只依賴與主鍵的部分字段。

# 所以上面的例子需要拆表:

CREATE TABLE orders(

order_id int primary key,

product_id int,

customer_id int

) character set = utf8;

CREATE TABLE product(

id int primary key,

name varchar(20)

) character set = utf8;

CREATE TABLE customer(

id int primary key,

name varchar(20)

) character set = utf8;

# 分成三個(gè)表之后,就滿足第二范式

# 3NF:必須滿足2NF,除主鍵列的其他列之間不能有傳遞依賴關(guān)系。

CREATE TABLE orders(

order_id int primary key,

product_id int,

customer_id int,

customer_phone varchar(15)

) character set = utf8;

# 修改為:

CREATE TABLE orders(

order_id int primary key,

product_id int,

customer_id int

) character set = utf8;

CREATE TABLE customer(

id int primary key,

name varchar(20),

phone varchar(15)

) character set = utf8;

# 總結(jié):

# 也就是在每列不能拆分的情況下(1NF),

# 其他列必須依賴主鍵的全部(2NF),

# 且只依賴于主鍵的全部(3NF)

總結(jié)

以上是生活随笔為你收集整理的mysql约束类型 A P_mysql笔记: 数据类型、约束、范式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。