mysql数据库表复用_MySQL 数据库之表操作
一、創(chuàng)建表的完整語法
create table 表(
字段名1 類型 [(寬度) 約束條件],
字段名2 類型 [(寬度) 約束條件],
字段名3 類型 [(寬度) 約束條件]
);
1.類型:使用限制字段必須以什么樣的數(shù)據(jù)類型傳值
約束條件:約束條件是在類型之外添加一種額外的限制
2.注意點(diǎn)
1.在同一張表中,字段名不能相同
2.寬度和約束條件可選,字段名和類型是必須的
3.最后一個(gè)字段后不用加逗號(hào)
二、基本的數(shù)據(jù)類型:
1、整型
1、作用:id號(hào),各種號(hào)碼,年齡,等級(jí)
2、分類: tinyint,int,bigint
3、注意:強(qiáng)調(diào):對(duì)于整型來說,數(shù)據(jù)類型后的寬度并不是存儲(chǔ)限制,而是顯示限制
所以在創(chuàng)建表示,如果字段采用的是整型類型,完全無需指定顯示寬度,
默認(rèn)的顯示寬度,足夠顯示完整當(dāng)初存放的數(shù)據(jù)
int的存儲(chǔ)寬度是4個(gè)Bytes,即32個(gè)bit,即2**32
無符號(hào)最大值為:4294967296-1
有符號(hào)最大值:2147483648-1
有符號(hào)和無符號(hào)的最大數(shù)字需要的顯示寬度均為10,而針對(duì)有符號(hào)的最小值則需要11位才能顯示完全,所以int類型默認(rèn)的顯示寬度為11是非常合理的
最后:整形類型,其實(shí)沒有必要指定顯示寬度,使用默認(rèn)的就ok
2、浮點(diǎn)型
1.作用:存儲(chǔ)身高、體重、薪資
2.分類:float、double、decimal
create table t3(x,float(255,30));
create table t4(x,double(255,30));
create table t5(x,decimal(65,30));
insert into t3 values(1.111111111111111111111111111111)
insert into t4 values(1.111111111111111111111111111111)
insert into t5 values(1.111111111111111111111111111111)
cmd運(yùn)行
mysql> select * fromt9;+----------------------------------+
| x |
+----------------------------------+
| 1.111111164093017600000000000000 |
+----------------------------------+
1 row in set (0.00sec)
mysql> select * fromt10;+----------------------------------+
| x |
+----------------------------------+
| 1.111111111111111200000000000000 |
+----------------------------------+
1 row in set (0.00sec)
mysql> select * fromt11;+----------------------------------+
| x |
+----------------------------------+
| 1.111111111111111111111111111111 |
+----------------------------------+
1 row in set (0.00 sec)
3.相同點(diǎn):
1.對(duì)于三者來說,都能存放30位小數(shù),
4.不同點(diǎn):
1.精度的排序從低到高:float、double、decimal
2.float與double類型能存放的整數(shù)位比becimal更多
3、字符類型
1.作用:姓名,地址,描述性的信息
2.分類:
char :? 定長(zhǎng),簡(jiǎn)單粗暴,浪費(fèi)空間,存取速度快
字符長(zhǎng)度范圍:0-255(一個(gè)中文是一個(gè)字符,是utf8編碼的3字節(jié))
例如:指定長(zhǎng)度為10,存>10個(gè)字符則報(bào)錯(cuò),存<10個(gè)字符則用空格填充直到湊夠10個(gè)字符存儲(chǔ)
varchar :變長(zhǎng),精確,節(jié)省空間,存取速度慢
字符長(zhǎng)度范圍:0-65535(如果大于21845會(huì)提示用其他類型 。mysql行最大限制為65535字節(jié),字符編碼為utf-8
強(qiáng)調(diào):varchar類型會(huì)在真實(shí)數(shù)據(jù)前加1-2Bytes的前綴,該前綴用來表示真實(shí)數(shù)據(jù)的bytes字節(jié)數(shù)(1-2Bytes最大表示65535個(gè)數(shù)字,正好符合mysql對(duì)row的最大字節(jié)限制,即已經(jīng)足夠使用)
存儲(chǔ):varchar類型存儲(chǔ)數(shù)據(jù)的真實(shí)內(nèi)容,不會(huì)用空格填充,如果'ab ',尾部的空格也會(huì)被存起來
create table t12(x char(4)); #超出4個(gè)字符則報(bào)錯(cuò),不夠4個(gè)字符則用空格補(bǔ)全成4個(gè)字符
create table t13(y varchar(4));#超出4個(gè)字符則報(bào)錯(cuò),不夠4個(gè)字符那么字符有幾個(gè)就存幾個(gè)
insert into t12 values('hello');
insert into t13 values('hello');
insert into t12 values('a'); #'a '
insert into t13 values('a'); #'a'
setglobal sql_mode="strict_trans_tables,PAD_CHAR_TO_FULL_LENGTH";
select char_length(x)from t12; #4
select char_length(y) from t13; #1
注意:
針對(duì)char類型,mysql在存儲(chǔ)時(shí)會(huì)將數(shù)據(jù)用空格補(bǔ)全存放到硬盤中
但會(huì)在讀出結(jié)果時(shí)自動(dòng)去掉末尾的空格,因?yàn)槟┪驳目崭裨谧侄蚊鞔_地等于一個(gè)值的場(chǎng)景中是無用
4、日期類型
分類:
date:1999-01-27
time:11:11:11
datetime:1999-01-27? 11:11:11
year: 1999
create table student(->id int,-> name varchar(20),->born_year year,->birth date,->class_time time,->reg_time datetime);insert into student values-> (1,'alex',"1995","1995-11-11","11:11:11","2017-11-11 11:11:11"),-> (2,'egon',"1997","1997-12-12","12:12:12","2017-12-12 12:12:12"),-> (3,'wsb',"1998","1998-01-01","13:13:13","2017-01-01 13:13:13");
MariaDB [db1]> select * fromstudent;+------+------+-----------+------------+------------+---------------------+
| id | name | born_year | birth | class_time | reg_time |
+------+------+-----------+------------+------------+---------------------+
| 1 | alex | 1995 | 1995-11-11 | 11:11:11 | 2017-11-11 11:11:11 |
| 2 | egon | 1997 | 1997-12-12 | 12:12:12 | 2017-12-12 12:12:12 |
| 3 | wsb | 1998 | 1998-01-01 | 13:13:13 | 2017-01-01 13:13:13 |
+------+------+-----------+------------+------------+---------------------+
5、枚舉與集合類型
作用與分類:
枚舉enum,多選一個(gè)
集合set,多選多
create table consumer(
name char(16),
sex enum('male','female'),
level enum('vip1','vip2','vip3','vip4','vip5',)
hobby set ('play','music',read','study'));
insert into consumer values
('egon','male','vip5','read,study'),
('alex','female','vip1','girl');
cmd 運(yùn)行
select* fromconsumer;+------+--------+-------+------------+
| name | sex | level | hobby |
+------+--------+-------+------------+
| egon | male | vip5 | read,study |
| alex | female | vip1 | |
+------+--------+-------+------------+
三、約束條件
1、not null 與default
是否可空,null表示空,非字符串
not null? ?不可空
null? ? 可空
默認(rèn)值,創(chuàng)建列表可以指定默認(rèn)值,當(dāng)插入數(shù)據(jù)時(shí)如果未主動(dòng)設(shè)置,則自動(dòng)添加默認(rèn)值
create table t15(
id int,
name char(16) notnull,
sex enum('male','female','other') not null default "male");
insert into t15(id,name) values
(1,'egon1'),
(2,'egon2'),
(3,'egon3');
cmd 運(yùn)行
mysql>desc t15;+-------+-------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------------------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | char(16) | NO | | NULL | |
| sex | enum('male','female','other') | NO | | male | |
+-------+-------------------------------+------+-----+---------+-------+
3 rows in set (0.04 sec)
2、unique:限制字段的值唯一(就是獨(dú)一無二)
#單列唯一
create table t16(
id int unique,
name char(16)
);#聯(lián)合唯一
create table server(
id int unique,
ip char(15),
port int,
unique(ip,port)
);
3、primary key:單單從約束角度去看,primary key 就等同于not null unique
1.強(qiáng)調(diào)
1.一張表中必須有,并且只能有一個(gè)主鍵
2.一張表中都應(yīng)該有一個(gè)id字段,而且應(yīng)該把id字段做成主鍵
單列做主鍵
create table t11(
id int primary key,
name char(16),
age int,
sex char(6)
);
聯(lián)合主鍵
create table t12(
ip char(15),
port int,
primary key(ip,port)
);
單列cmd查看:
mysql>desc t11;+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | char(16) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
| sex | char(6) | YES | | NULL | |
+-------+----------+------+-----+---------+-------+聯(lián)合cmd查看:
mysql>desc t12;+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| ip | char(15) | NO | PRI | | |
| port | int(11) | NO | PRI | 0 | |
+-------+----------+------+-----+---------+-------+
4、auto_increment
約束字段為自動(dòng)增長(zhǎng),被約束的字段必須同時(shí)被key約束
create table t13(
id int primary key auto_increment,
name char(16)
);
mysql> insert into t13(name) values('egon'),('alex');
cmd 運(yùn)行:
mysql> select * fromt13;+----+------+
| id | name |
+----+------+
| 1 | egon |
| 2 | alex |
+----+------+
2 rows in set (0.02 sec)
1.注意點(diǎn):
1.通常與primary key連用,而且通常是給id字段加
2.auto_incremnt只能給被定義成key(unique key,primary key)的字段加
總結(jié)
以上是生活随笔為你收集整理的mysql数据库表复用_MySQL 数据库之表操作的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PowerBI使用Tabular Edi
- 下一篇: docker二进制安装mysql_Doc