mysql数据库表复用_MySQL 数据库之表操作
一、創(chuàng)建表的完整語法
create table 表(
字段名1 類型 [(寬度) 約束條件],
字段名2 類型 [(寬度) 約束條件],
字段名3 類型 [(寬度) 約束條件]
);
1.類型:使用限制字段必須以什么樣的數據類型傳值
約束條件:約束條件是在類型之外添加一種額外的限制
2.注意點
1.在同一張表中,字段名不能相同
2.寬度和約束條件可選,字段名和類型是必須的
3.最后一個字段后不用加逗號
二、基本的數據類型:
1、整型
1、作用:id號,各種號碼,年齡,等級
2、分類: tinyint,int,bigint
3、注意:強調:對于整型來說,數據類型后的寬度并不是存儲限制,而是顯示限制
所以在創(chuàng)建表示,如果字段采用的是整型類型,完全無需指定顯示寬度,
默認的顯示寬度,足夠顯示完整當初存放的數據
int的存儲寬度是4個Bytes,即32個bit,即2**32
無符號最大值為:4294967296-1
有符號最大值:2147483648-1
有符號和無符號的最大數字需要的顯示寬度均為10,而針對有符號的最小值則需要11位才能顯示完全,所以int類型默認的顯示寬度為11是非常合理的
最后:整形類型,其實沒有必要指定顯示寬度,使用默認的就ok
2、浮點型
1.作用:存儲身高、體重、薪資
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運行
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.相同點:
1.對于三者來說,都能存放30位小數,
4.不同點:
1.精度的排序從低到高:float、double、decimal
2.float與double類型能存放的整數位比becimal更多
3、字符類型
1.作用:姓名,地址,描述性的信息
2.分類:
char :? 定長,簡單粗暴,浪費空間,存取速度快
字符長度范圍:0-255(一個中文是一個字符,是utf8編碼的3字節(jié))
例如:指定長度為10,存>10個字符則報錯,存<10個字符則用空格填充直到湊夠10個字符存儲
varchar :變長,精確,節(jié)省空間,存取速度慢
字符長度范圍:0-65535(如果大于21845會提示用其他類型 。mysql行最大限制為65535字節(jié),字符編碼為utf-8
強調:varchar類型會在真實數據前加1-2Bytes的前綴,該前綴用來表示真實數據的bytes字節(jié)數(1-2Bytes最大表示65535個數字,正好符合mysql對row的最大字節(jié)限制,即已經足夠使用)
存儲:varchar類型存儲數據的真實內容,不會用空格填充,如果'ab ',尾部的空格也會被存起來
create table t12(x char(4)); #超出4個字符則報錯,不夠4個字符則用空格補全成4個字符
create table t13(y varchar(4));#超出4個字符則報錯,不夠4個字符那么字符有幾個就存幾個
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
注意:
針對char類型,mysql在存儲時會將數據用空格補全存放到硬盤中
但會在讀出結果時自動去掉末尾的空格,因為末尾的空格在字段明確地等于一個值的場景中是無用
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,多選一個
集合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 運行
select* fromconsumer;+------+--------+-------+------------+
| name | sex | level | hobby |
+------+--------+-------+------------+
| egon | male | vip5 | read,study |
| alex | female | vip1 | |
+------+--------+-------+------------+
三、約束條件
1、not null 與default
是否可空,null表示空,非字符串
not null? ?不可空
null? ? 可空
默認值,創(chuàng)建列表可以指定默認值,當插入數據時如果未主動設置,則自動添加默認值
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 運行
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:限制字段的值唯一(就是獨一無二)
#單列唯一
create table t16(
id int unique,
name char(16)
);#聯合唯一
create table server(
id int unique,
ip char(15),
port int,
unique(ip,port)
);
3、primary key:單單從約束角度去看,primary key 就等同于not null unique
1.強調
1.一張表中必須有,并且只能有一個主鍵
2.一張表中都應該有一個id字段,而且應該把id字段做成主鍵
單列做主鍵
create table t11(
id int primary key,
name char(16),
age int,
sex char(6)
);
聯合主鍵
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 | |
+-------+----------+------+-----+---------+-------+聯合cmd查看:
mysql>desc t12;+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| ip | char(15) | NO | PRI | | |
| port | int(11) | NO | PRI | 0 | |
+-------+----------+------+-----+---------+-------+
4、auto_increment
約束字段為自動增長,被約束的字段必須同時被key約束
create table t13(
id int primary key auto_increment,
name char(16)
);
mysql> insert into t13(name) values('egon'),('alex');
cmd 運行:
mysql> select * fromt13;+----+------+
| id | name |
+----+------+
| 1 | egon |
| 2 | alex |
+----+------+
2 rows in set (0.02 sec)
1.注意點:
1.通常與primary key連用,而且通常是給id字段加
2.auto_incremnt只能給被定義成key(unique key,primary key)的字段加
總結
以上是生活随笔為你收集整理的mysql数据库表复用_MySQL 数据库之表操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PowerBI使用Tabular Edi
- 下一篇: docker二进制安装mysql_Doc