MySQL数据类型与操作数据表,MySQL数据表操作

制造数据表

始建数据表

MySQL常用数据类型
整数:tinyint,smallint,int,bight
浮点数:float(p(所占总位数)、s(小数点所占位数))四字节
double(p、s)8字节
定点数:decimal(p、s)
日期/时间:data、time、datatime
文本:char、varchar、text
二进制:bit
1.整形
MYSQL数据类型-整型
TINYINT——1个字节—负128~127 ,无符号0到255
SMALLINT- –2个字节—-负32768到32767, 0到65535
MEDIUMINT—-3个字节—负8388608到8388607, 0到16777215
INT———-4个字节—负2147483648到2147483647 0到4294967295
BIGINT——-8个字节—-2的63次方~2的63次方-1;无符号:0~2的64次方-1;
2浮点型:
@MySQL——(二)数据类型与操作数据表——浮点型
1、浮点型
FLOAT[(M,D)]:那里M指总位数,D指小数点后位数。如FLOAT(柒,二)则能表示的最大值为:9999玖.9九
DOUBLE[(M,D)]
2、1般情状下利用FLOAT丰盛
1.float[M,D],4个字节
2.double[M,D],8个字节
(M-总位数,D-小数位数)
时刻和日期
1、YEAR:1970至2069
2、TIME:-838:59:59至838:59:59
3、DATE:1000-1-1至9999-12-31
4、DATETIME: 1000-1-1 00:00:00至9999-12-31 23:59:59
五、TIMESTAMP存款和储蓄范围:壹玖柒零-一-一 00:00:00到2037-1二-3一 二三:5玖:5九
MySQL数据类型(肆):字符型
1、CHA奥迪Q三(M):定长类型,比如CHA牧马人(伍),假使我们只赋值abc,那么系统会自行在后面补四个空格0——255
二、VA大切诺基CHACRUISER(M):变长类型,L+3个字节,当中L<=M且0<=M0——65535
叁、ENUM(’value1′,’value二’…)枚举值,提供多少个选项,选择之中贰个,如:性别(’男’,’女’,’保密’)
四、SET(‘value一’,’value二’…)
最多陆13个分子,能够任选个中在那之中多少个,任意排列组合
MEDIUMTEXT -L+3字节, L<2^24
LONGTEXT -L+4字节, L<2^32
ENUM(‘value壹’,’value贰’…)
-一或2个字节,取决于枚举值的个数(最多65伍三16个值)
SET(‘value一’,’value二’…)
-一、2、三、四或七个字节,取决于set成员的多寡(最多陆1五个分子)
譬如说char(M)的证实,官方说的是:会据有M × w个字节, 0 <= M <= 25五,
where w is the number of bytes required for the maximum-length character
in the character
set。w的情趣是某种字符编码中据为己有的最大空间。所以其实那里M的意趣便是实际的字符个数的意味,
纵然这些那种编码下种种字符占用1个字节、一个字节,也能积存最大贰伍十二个字符。并不是如ppt中所说的最大M个字节。
再有关于varchar(M)的说法,官方说的是:L + 一 bytes if column values
require 0 − 255 bytes, L + 二 bytes if values may require more than 25五bytes。所以那边不必然是L+一,还或许是L+贰。ppt中所说的最长是65五三拾8个字节,不过又是L+1,3个字节显明是不够存款和储蓄那么大的长短的,所以ppt照旧有个别出入的。
还有其余的tinytext,text,mediumtext,longtext,那么些连串最大尺寸正是二^捌-一个字节,二^16-一字节,二^二四-1个字节,二^32-三个字节,要是某种字符编码中,每一种字符占用3个字节,那么总的能够储存的字符数将要减价。
@MySQL——(2)数据类型与操作数据表——创立数据表
一、数据表
1、数据表(或表)是数据库最重点的组成都部队分之一,是其余对象的基本功
二、表是2个2维表,行称为【记录】,列称为【字段】
二、成立数据表
一、首先张开数据库(数据库要存在): USE 数据库名称
二、创造数据表:CREATE TABLE [IF NOT EXISTS] table_name(
column_name(列名称) data_type(列类型),
…. )
举例——
CREATE TABLE tb1(
username VARCHAR(20),
userage TINYINT UNSIGNED,
salary FLOAT(8,2) UNSIGNED,
);
UNSIGNED 无符号

壹.0 创立数据表

  • 开采数据库 USE db_name;

  • 翻看当前应用的数据库 SELECT DATABASE();

  • 开创数据表
    CREATE TABLE [IF NOT EXISTS] table_name (
    MySQL数据类型与操作数据表,MySQL数据表操作。column_name data_type [UNSIGNED] [NOT NULL | NULL],
    ……
    )
    例如:(salary FLOAT(M,D) UNSIGNED,
    M是数字总位数,D是小数点前边的位数,UNSIGNED 表示无符号值。)
    mysql> CREATE TABLE t_student (
    -> username VARCHAR(20),
    -> age TINYINT UNSIGNED,
    -> salary FLOAT(8,2) UNSIGNED
    -> );

  • 翻开数据表列表
    SHOW TABLES [FROM db_name]

  • 查阅数据表结构
    SHOW COLUMNS FROM tbl_name

  • 布置记录
    INSERT [INTO] tbl_name [(col_name, …)] VALUES(val, …)

  • 笔录查找
    SELECT expr,… FROM tbl_name

  • 电动编号
    AUTO_INCREMENT,与主键组合使用,暗许初始值为壹,每回增量为一.
    主键约束 P奥迪Q7IMAEnclaveY KEY,每张表唯有二个主键并且为 NOT NULL.
    mysql> CREATE TABLE tb3(
    -> id SMALLINT UNSIGNED AUTO_997755.com澳门葡京,INCREMENT PRIMARY KEY,
    -> username VARCHAR(30) NOT NULL
    -> );

  • 唯1约束 UNIQUE KEY
    唯壹约束可以确定保证记录的唯一性
    唯壹约束的字段可感觉空值
    每张数据表能够存在多个唯一约束
    mysql> CREATE TABLE tb5(
    -> id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    -> username VARCHAR(30) NOT NULL UNIQUE KEY,
    -> age TINYINT UNSIGNED
    -> );

  • 默认值 DEFAULT
    当插入记录时,假诺未有精晓为字段赋值,则自动赋予默许值。
    mysql> CREATE TABLE tb6 (
    -> id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    -> username VARCHAR(20) NOT NULL UNIQUE KEY,
    -> sex ENUM(‘1′,’2′,’3’) DEFAULT ‘3’
    -> );

张开数据库

USE 数据库名称

mysql> USE D1;
Database changed

使用 USE D1;表示张开数据库D一,大家得以经过SELECT
DATABASE();
来查看当前打开的数据库:

mysql> SELECT DATABASE();
+------------+
| DATABASE() |
+------------+
| d1         |
+------------+
1 row in set (0.00 sec)

开荒数据库

USE 数据库名称

mysql> USE D1;
Database changed

使用 USE D1;表示张开数据库D一,大家得以经过SELECT
DATABASE();
来查看当前展开的数据库:

mysql> SELECT DATABASE();
+------------+
| DATABASE() |
+------------+
| d1         |
+------------+
1 row in set (0.00 sec)

始建数据表

CREATE TABLE [IF NOT EXISTS] table_name (
column_name datatype,
……
)

以此协会极粗略,对于[IF NOT
EXISTS],在首先篇“MySQL基本操作”一度认证,那里不赘述。

作者们来创建三个数量表 table1

mysql> CREATE TABLE table1(
    -> username VARCHAR(20),
    -> age TINYINT UNSIGNED,
    -> salary FLOAT(8,2) UNSIGNED
    -> );
Query OK, 0 rows affected (0.74 sec)

注意那里的UNSIGNED,表示无符号值,就是正数,可回看“MySQL基本数据类型”查看,TINYINT
UNSIGNED 表示 0 ~ 25伍 之间的数值。

此间提示创立成功,大家能够通过以下语句来证实一下:

SHOW TABLES [FROM db_name][LIKE ‘pattern’ | WHERE expr]

mysql> SHOW TABLES FROM D1;
+--------------+
| Tables_in_d1 |
+--------------+
| table1       |
+--------------+
1 row in set (0.00 sec)

此地大家得以观望创立了table一那张表。

创设数据表

CREATE TABLE [IF NOT EXISTS] table_name (
column_name datatype,
……
)

本条布局非常粗略,对于[IF NOT
EXISTS],在率先篇“MySQL基本操作”业已评释,那里不赘述。

小编们来成立叁个数目表 table1

mysql> CREATE TABLE table1(
    -> username VARCHAR(20),
    -> age TINYINT UNSIGNED,
    -> salary FLOAT(8,2) UNSIGNED
    -> );
Query OK, 0 rows affected (0.74 sec)

留意这里的UNSIGNED,表示无符号值,便是正数,可回看“MySQL基本数据类型”查看,TINYINT
UNSIGNED 表示 0 ~ 25伍 之间的数值。

此地提示创立成功,我们能够通过以下语句来证实一下:

SHOW TABLES [FROM db_name][LIKE ‘pattern’ | WHERE expr]

mysql> SHOW TABLES FROM D1;
+--------------+
| Tables_in_d1 |
+--------------+
| table1       |
+--------------+
1 row in set (0.00 sec)

那边我们得以看到创立了table壹那张表。

查看数据
翻看数据表:(查看选用的数据库的表)
SHOW TABLES [FROM db_name] [LIKE ‘pattern’ | WHERE
expr];(能够用来查阅其他数据库的表列表)
例:
SHOW TABLES;//查看当前甄选的数据库的全部表
SHOW TABLES FROM
TEST;//查看TEST数据库中的全数表,当前增选数据库地点不改变。
SELECT DATABASE();//查看当前接纳的数据库
SHOW TABLES [FROM db_name]
[LIKE ‘pattern’ | WHERE expr]
既能够查看当前数据库中的数据表,也可查阅其余数据库中的数据表

查阅数据表结构

SHOW COLUMNS FROM tbl_name

mysql> SHOW COLUMNS FROM table1;
+----------+---------------------+------+-----+---------+-------+
| Field    | Type                | Null | Key | Default | Extra |
+----------+---------------------+------+-----+---------+-------+
| username | varchar(20)         | YES  |     | NULL    |       |
| age      | tinyint(3) unsigned | YES  |     | NULL    |       |
| salary   | float(8,2) unsigned | YES  |     | NULL    |       |
+----------+---------------------+------+-----+---------+-------+
3 rows in set (0.10 sec)

查看数据表结构

SHOW COLUMNS FROM tbl_name

mysql> SHOW COLUMNS FROM table1;
+----------+---------------------+------+-----+---------+-------+
| Field    | Type                | Null | Key | Default | Extra |
+----------+---------------------+------+-----+---------+-------+
| username | varchar(20)         | YES  |     | NULL    |       |
| age      | tinyint(3) unsigned | YES  |     | NULL    |       |
| salary   | float(8,2) unsigned | YES  |     | NULL    |       |
+----------+---------------------+------+-----+---------+-------+
3 rows in set (0.10 sec)

mysql> show databases;
+——————–+
| Database |
+——————–+
| information_schema |
| bookstore |
| mysql |
| yggl |
+——————–+
4 rows in set
mysql> use bookstore;
Database changed
mysql> show tables;
+———————+
| Tables_in_bookstore |
+———————+
| book |
+———————+
1 row in set
mysql> show tables from bookstore;
+———————+
| Tables_in_bookstore |
+———————+
| book |
+———————+
1 row in set
.查看数据表列表
壹.翻看数据表列表
SHOW TABLES [FROM db_name] [LIKE ‘pattern’ | WHERE expr]
SHOW TABLES; //查看当前数据库中的表
SHOW TABLES FROM mysql;
FROM之后,当前数据库不会产生改换
SHOW COLUMNS FROM tb壹; 查看tb第11中学的数据表结构
笔录查找
翻开数据表
SHOW table-name;
插入记录
INSERT [INTO] table-name [(column-name,……)] VALUES(val,….);
\\字符要加”号。
\\table-name前面未有标明插入列的情事下,每壹列的值都要按梯次插入才行。
笔录查找
SELECT expr,…FROM table-name;
SELECT * FROM test; \\*号是实际全部字段。
SELECT 查找关键字 expr 字段 *意味着壹切
FROM tb1_name哪个数据表
空值与非空
壹、数据表(或表)是数据库最要害的组成都部队分之壹,是别的对象的功底。
数据表是3个二维表,行称为【记录】,列称为【字段】
二、创造数据表
1、首先展开数据库(数据库要设有): USE 数据库名称
二、创设数据表:CREATE TABLE [IF NOT EXISTS] table_name(
column_name(列名称) data_type(列类型),
…. )
举例:
CREATE TABLE tb1(
username VARCHAR(20),
userage TINYINT UNSIGNED,
salary FLOAT(8,2) UNSIGNED,
);
UNSIGNED 无符号
空值与非空:NULL,字段值可以为空 NOT
NULL,字段值禁止为空,不赋值会报错
3、查看数据表列表
一、查看数据表是还是不是留存:SHOW TABLES [FROM db_name] [LIKE ‘pattern’ |
WHERE expr ]
二、查看某些表中全体列的音信:SHOW COLUMNS FROM tbl_name;
四、记录的插入
一、插入记录 INSERT [INTO] tbl_name [(col_name,…) ]
VALUES(val1,val2,….)
二、部分字段赋值使用(col_name1,col_name2,…)
3、插入列col_name可以省略,但必须为具有字段输入新闻,不然报错
5、记录的检索
壹、查找记录:SELECT expr,… FROM tbl_name;
SELECT * FROM tbl_name;

插入记录

成立完表之后将要写入数据了,通过以下语句插入记录:

INSERT [INTO] tbl_name [(col_name,…)] VALUE(val,…)

这里 [(col_name,…)]
为可挑选,倘诺不丰硕,那么在VALUE里面包车型大巴值必须逐项与数据表的字段对应,不然无法插入,大家看一下:

mysql> INSERT table1 VALUE("LI",20,6500.50);
Query OK, 1 row affected (0.14 sec)

此间VALUE括号里面与table一的字段一一对应,分别为username=“LI”,age=20,salary=6500.50

上边大家再插入一条数据,然则尚未相应:

mysql> INSERT table1 Value("Wang",25);
ERROR 1136 (21S01): Column count doesn't match value count at row 1

无所适从插入,因为未有给出salary的值。

透过加多 [(col_name,…)] 就可以灵活插入数据:

mysql> INSERT table1(username,age) VALUE("Wang",25);
Query OK, 1 row affected (0.11 sec)

table一 与 VALUE 1壹对应。

安顿记录

制造完表之后将要写入数据了,通过以下语句插入记录:

INSERT [INTO] tbl_name [(col_name,…)] VALUE(val,…)

这里 [(col_name,…)]
为可选用,假如不加上,那么在VALUE里面包车型客车值必须逐项与数据表的字段对应,不然不能够插入,大家看一下:

mysql> INSERT table1 VALUE("LI",20,6500.50);
Query OK, 1 row affected (0.14 sec)

此处VALUE括号里面与table一的字段1壹对应,分别为username=“LI”,age=20,salary=6500.50

下边我们再插入一条数据,可是并未有对号入座:

mysql> INSERT table1 Value("Wang",25);
ERROR 1136 (21S01): Column count doesn't match value count at row 1

不只怕插入,因为尚未给出salary的值。

因此增加 [(col_name,…)] 就可以灵活插入数据:

mysql> INSERT table1(username,age) VALUE("Wang",25);
Query OK, 1 row affected (0.11 sec)

table一 与 VALUE 1壹对应。

活动编号
一.自动编号 AUTO_INCREMENT
电动编号,且必须与主键合作使用
2.活动编号AUTO_INCREMENT作用
一、自动编号:保障记录的唯1性
贰、类型必须为整型(能够是FLOAT(5,0)等,小数点后务必为0),必须和主键PQX56IMA奥迪Q三Y
KEY组合使用
三、暗中同意意况下,初步值为一,每便的增量为一
默许情形下,初叶值为1, 每一遍增量为一.
CREATE TABLE tb3(
id SMALLINT UNSIGNED AUTO_INCREMENT,
username VA科雷傲CHA凯雷德(30) NOT NULL); //报错,自动增量字段必须设置成主键
主键约束

查找表数据

前边早已插入了两条数据,能够通过以下语句查找表数据:

SELECT expr,… FROM tbl_name

对此数据库的搜寻语句SELECT,内容比较多,后边小说会实际疏解,我们用贰个粗略的说话来查找表的始末:

mysql> SELECT * FROM table1
    -> ;
+----------+------+---------+
| username | age  | salary  |
+----------+------+---------+
| LI       |   20 | 6500.50 |
| Wang     |   25 |    NULL |
+----------+------+---------+
2 rows in set (0.00 sec)

瞩目MySQL语句是以“;”结尾,借使忘了写是力不从心实行语句的,在箭头后边增加分号就可以;那里咱们能够看出表里面有两条刚刚写入的数额。

查找表数据

前方早已插入了两条数据,能够透过以下语句查找表数据:

SELECT expr,… FROM tbl_name

对此数据库的搜索语句SELECT,内容比较多,后边小说会实际解说,大家用2个简短的口舌来查找表的剧情:

mysql> SELECT * FROM table1
    -> ;
+----------+------+---------+
| username | age  | salary  |
+----------+------+---------+
| LI       |   20 | 6500.50 |
| Wang     |   25 |    NULL |
+----------+------+---------+
2 rows in set (0.00 sec)

只顾MySQL语句是以“;”结尾,要是忘了写是心有余而力不足实施语句的,在箭头前边加多分号就能够;那里我们得以看看表里面有两条刚刚写入的数据。

主键可以写为PTucsonIMA智跑Y KEY,也足以写成KEY
每张数据表只可以存在一个主键
主键保障记录的唯一性
主键自动为NOT
NULL,也便是说必须求为主键赋值。但假设主键选择了AUTO_INCREMENT,那么不要求手动赋值。
auto_increment必须和主键primary key一齐行使,可是主键primary
key不必然要和auto_increment一块使用
(主键的字段是能够赋值的,但无法赋一样的值)
主键约束
一、唯一性(能够赋值但是不可能给四个记录赋同样的值)每张表只存在2个主键
贰、非空,插入格局与NOT NULL同样
三、自动编号(AUTO_INCREMENT)必须与主键(P汉兰达IMA奥迪Q3Y
KEY)搭配使用,主键能够不与机动编号一齐使用
创建1个带主键的表:
CREATE TABLE user(
-> id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
-> username VARCHAR(20) NOT NULL
-> );
Database changed
随着一回插入数据 便会有编号出现 不过假使剔除了 编号会产出抛锚
唯1约束
唯一约束与主键约束的分别:
UNIQUE KEY 一张数据表可以有几个,而P大切诺基IMA奇骏Y KEY一张数据表只可以有三个
唯1约束的字段可以为空,主键约束的字段不能够为空
(唯1约束若八个字段为空,看起来就像是无法有限辅助唯1性,但存款和储蓄的惟有二个‘空’,所以依旧保证了字段的唯1性)
UNIQUE KEY
(一)唯1约束
(2)唯1约束能够确定保障记录的唯一性
(3)唯一约束的字段可认为空值(NULL)
(四)每张数据表能够存在多少个唯一约束

表创立的为主约束

表创建的主导约束

私下认可约束

字段的NULL与NOT NULL

在成立表的时候,大家得以设定该字段是不是可为空,固然不行为空,那么在插入数据时,则不能够为空。

我们来创设贰个数据表table2

mysql> CREATE TABLE table2(
    -> username VARCHAR(20) NOT NULL,
    -> age TINYINT UNSIGNED NULL,
    -> salary FLOAT(8,2)
    -> );

那边username为非空,age为NULL,salary不写,大家来查看表结构:

mysql> SHOW COLUMNS FROM table2;
+----------+---------------------+------+-----+---------+-------+
| Field    | Type                | Null | Key | Default | Extra |
+----------+---------------------+------+-----+---------+-------+
| username | varchar(20)         | NO   |     | NULL    |       |
| age      | tinyint(3) unsigned | YES  |     | NULL    |       |
| salary   | float(8,2)          | YES  |     | NULL    |       |
+----------+---------------------+------+-----+---------+-------+
3 rows in set (0.01 sec)

从此处大家得以见到,username的NULL为NO,别的七个字段为YES,对于可认为空的字段,写不写NULL都代表可认为空。

字段的NULL与NOT NULL

在创造表的时候,我们得以设定该字段是不是可为空,如果不行为空,那么在插入数据时,则不能够为空。

我们来创建贰个数据表table2

mysql> CREATE TABLE table2(
    -> username VARCHAR(20) NOT NULL,
    -> age TINYINT UNSIGNED NULL,
    -> salary FLOAT(8,2)
    -> );

此地username为非空,age为NULL,salary不写,大家来查看表结构:

mysql> SHOW COLUMNS FROM table2;
+----------+---------------------+------+-----+---------+-------+
| Field    | Type                | Null | Key | Default | Extra |
+----------+---------------------+------+-----+---------+-------+
| username | varchar(20)         | NO   |     | NULL    |       |
| age      | tinyint(3) unsigned | YES  |     | NULL    |       |
| salary   | float(8,2)          | YES  |     | NULL    |       |
+----------+---------------------+------+-----+---------+-------+
3 rows in set (0.01 sec)

从此处大家得以看到,username的NULL为NO,别的八个字段为YES,对于可以为空的字段,写不写NULL都代表可感到空。

  1. 主键约束 primary key 与Auto_Increment 自动编号合营使用
  2. 唯一约束 unique key
  3. 暗中认可约束 default
    示例:
    CREATE TABLE tb6(
    id SMALLINT UNSIGED AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(20) NOT NULL UNIQUE KEY,
    sex ENUM(‘1′,’二’,’三’) DEFAULT ‘三’,)//表示当sex未有赋值时,暗许值为3
    总结
    数据类型 整型 (tinyint smallint mediumint int bigint)
    浮点型 (FLOAT{[M,D]},DOUBLE{[M,D]})M:总位数,D:小数点后位数
    日期 (YEAR DATE TIME TIMESTEMP)
    字符型 (CHAR VARCHAR TEXT)
    DOS 分界面连接数据库 mysql -u用户名 -p密码 -hHOST
    展现数据库 SHOW DATABASES;
    体现表结构 SHOW COLUMNS FROM table;
    来得全数表 SHOW TABLES;
    进入数据库 USE 数据库;
    创制数据库 CREATE DATABASE 库名;
    始建表 CREATE TABLE 表名(字段及音讯);
    插入数据 INSERT INTO table []VALUES();[]为空表达插入整体的值
    询问数据 SELECT 字段 FROM table WHERE 条件
    自增自动编号 auto_increment
    主键约束 P大切诺基IMA锐界Y
    KEY(有auto_increment的一定是主键,主键不自然有auto_increment)
    唯1约束UNIQUE KEY
    暗许约束 DEFAULT 当未有赋值时则自动增添默许值
    四.非空羁绊:NOT NULL
    5.外键约束:
    *CREATE TABLE tb_name(
    …,

    数据表操作:
    )//创制数据表(结构)
    *SHOW COLUMNS FROM tb_name//查看数据表结构(字段)
    *INSERT tb_name[(…)] VALUES(…)//向数据表内插入记录
    *SELECT *FROM tb_name//查看数据表的笔录

自行编号

AUTO_INCREMENT

auto_increment,auto自动,increment是充实的乐趣,组合起来表示自动增添,也正是足以自动遵照从小到大的逐一编号。

  • 不得不用来主键(主键表示表中多少的绝无仅有象征,能够通过主键来分别表中的数据)
  • 暗中认可景况下为1,增量为一

上面来操作一下:

mysql> CREATE TABLE table3(
    -> id SMALLINT UNSIGNED AUTO_INCREMENT,
    -> username VARCHAR(20)
    -> );
ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key

报错,因为 id 未有设置为主键。

自行编号

AUTO_INCREMENT

auto_increment,auto自动,increment是充实的乐趣,组合起来表示自动增添,也正是足以自动遵照从小到大的各种编号。

  • 只得用来主键(主键表示表中多少的绝无仅有代表,能够透过主键来分别表中的数据)
  • 私下认可情状下为1,增量为一

上面来操作一下:

mysql> CREATE TABLE table3(
    -> id SMALLINT UNSIGNED AUTO_INCREMENT,
    -> username VARCHAR(20)
    -> );
ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key

报错,因为 id 未有设置为主键。


安装主键

PRIMARY KEY

  • 主键约束
  • 每张表只可以存在贰个主键
  • 主键保险记录的唯一性
  • 主键自动为NOT NULL

这正是说大家增多主键,重新操作一回:

mysql> CREATE TABLE table3(
    -> id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    -> username VARCHAR(20)
    -> );
Query OK, 0 rows affected (0.42 sec)

瞩目顺序,PPAJEROIMA奇骏Y KEY 要放在最终。

那样大家就创办成功,上面依次插入数据,并查看结果:

mysql> INSERT table3(username) VALUES("Zhang");
Query OK, 1 row affected (0.09 sec)

mysql> INSERT table3(username) VALUES("Weng");
Query OK, 1 row affected (0.07 sec)

mysql> INSERT table3(username) VALUES("Chen");
Query OK, 1 row affected (0.09 sec)

mysql> SELECT * FROM table3;
+----+----------+
| id | username |
+----+----------+
|  1 | Zhang    |
|  2 | Weng     |
|  3 | Chen     |
+----+----------+
3 rows in set (0.00 sec)

大家能够观望id自动编号,从小到大一回依次编号。

安装主键

PRIMARY KEY

  • 主键约束
  • 每张表只好存在3个主键
  • 主键保险记录的唯一性
  • 主键自动为NOT NULL

那正是说我们增多主键,重新操作1次:

mysql> CREATE TABLE table3(
    -> id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    -> username VARCHAR(20)
    -> );
Query OK, 0 rows affected (0.42 sec)

在意顺序,POdysseyIMA奇骏Y KEY 要放在最后。

如此我们就成立成功,上面依次插入数据,并查阅结果:

mysql> INSERT table3(username) VALUES("Zhang");
Query OK, 1 row affected (0.09 sec)

mysql> INSERT table3(username) VALUES("Weng");
Query OK, 1 row affected (0.07 sec)

mysql> INSERT table3(username) VALUES("Chen");
Query OK, 1 row affected (0.09 sec)

mysql> SELECT * FROM table3;
+----+----------+
| id | username |
+----+----------+
|  1 | Zhang    |
|  2 | Weng     |
|  3 | Chen     |
+----+----------+
3 rows in set (0.00 sec)

大家能够见见id自动编号,从小到大学一年级次依次编号。

自律以及修改数据表
外键约束:
FOREIGN KEY (子表字段名) REFERENCES 父表 (父表字段名)
须要:保持数据壹致性,完整性;完结1对一或一对多涉及。
数据表的存款和储蓄引擎只好为InnoDB:配置文件中default-storage-engine=INNODB;
父表和子表禁止利用权且表(子表:具备外键列的表;父表:子表参照的表)
外键列和参照列必须持有相似的数据类型。数字长度或有无标记必须一律,字符长度可不等
外键列和参照列必须创设索引。要是参照列不存在索引的话,MySQL将自动创制索引
SHOW INDEXES FROM 表名 查询表格中的索引
开发1个数据库
USE test
创建3个用户数据表
CREATE TABLE users(
-> id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT
-> username VARCHAR(10) NOT NULL
->pid SMALLINT UNSIGNED//pid和表province中id字段类型都要完全平等
->FOREIGN KEY (pid) REFERENCES provinces (id)
->);
子表是users,父表是province
外键列pid,参照列id,
province的id加过主键,主键在创设的时候会活动成立索引。所以id字段上壹度创设过索引,参照列已经有了目录
来得索引SHOW INDEXES FROM province;
外键列上大家并未有为pid钦定主键,系统自动创立索引
在 MY.ini 文件中编辑私下认可的蕴藏引擎:default-storage-engine=INNODB;
突显创制表的言辞:SHOW CREATE TABLE table_name;
查看表是不是有目录:SHOW INDEXS FROM table_name;
以网格查看表是或不是有目录:SHOW INDEXS FROM table_name\G;
Eg:
CREATE TABLE table_name1(
id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20) NOT NULL
)
CREATE TABLE table_name2(
id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(20) NOT NULL,
pid SMALLINT UNSIGNED,
FOREIGN KEY (pid) REFERENCES table_name1(id) /* 外键 pid 参照
table_name1中的 id 字段 */
)

唯1约束

UNIQUE KEY

  • 唯1约束
  • 唯1约束保险记录不可重复(唯壹性)
  • 唯1约束可认为空值(NULL)
  • 能够有三个唯壹约束

mysql> CREATE TABLE table4(
    -> id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    -> username VARCHAR(20) UNIQUE KEY,
    -> age TINYINT UNSIGNED
    -> );
Query OK, 0 rows affected (0.43 sec)

mysql> INSERT table4(username) VALUE("Li");
Query OK, 1 row affected (0.11 sec)

mysql> INSERT table4(username) VALUE("Li");
ERROR 1062 (23000): Duplicate entry 'Li' for key 'username'

mysql> INSERT table4(username) VALUE("Chen");
Query OK, 1 row affected (0.10 sec)

对于username大家设置为唯1约束,所以Li不可被再一次创造,改为“Chen”就能够。注意那里只是尝试,在实操中,名字如出壹辙或然根本的,应该依据真实情形建立数据表。

唯1约束

UNIQUE KEY

  • 唯一约束
  • 唯壹约束保险记录不可重复(唯1性)
  • 唯1约束可以为空值(NULL)
  • 能够有多少个唯一约束

    mysql> CREATE TABLE table4(

    -> id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    -> username VARCHAR(20) UNIQUE KEY,
    -> age TINYINT UNSIGNED
    -> );
    

    Query OK, 0 rows affected (0.43 sec)

    mysql> INSERT table4(username) VALUE(“Li”);
    Query OK, 1 row affected (0.11 sec)

    mysql> INSERT table4(username) VALUE(“Li”);
    ERROR 1062 (23000): Duplicate entry ‘Li’ for key ‘username’

    mysql> INSERT table4(username) VALUE(“Chen”);
    Query OK, 1 row affected (0.10 sec)

对于username大家设置为唯1约束,所以Li不可被另行创造,改为“Chen”就能够。注意那里只是尝试,在实操中,名字一样大概根本的,应该依照实际情形建立数据表。

CASCADE:删除或更新父表中的数据对应的删减或更新子表中的相匹配的行;
SHOW CREATE TABLE tb_name;//展现数据表创制时的指令;
创办子表:users1;
>CREATE TABLE users(
>id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
>username VARCHAR(10) NOT NULL,
>pid(外键) SMALLINT(与参照键类型同样)
UNSIGNED(与参照键有无符号类型也要1律),//外键的意义呈现在这:如若我们要加多1个省份的字段,须要加多个char型的,未来有了关系型数据库,大家只供给仓储省份的id就可以;
>FOREIGN KEY (pid) PREFERENCES provinces (id) ON DELETE CASCADE,
>);
INSERT provinces(pname) VALUES(‘A’);
INSERT provinces(pname) VALUES(‘B’);
INSERT provinces(pname) VALUES(‘C’);
INSERT users1(username,pid) VALUES(‘Tom’,1);
INSERT users1(username,pid) VALUES(‘Jerry’,2);
INSERT users1(username,pid) VALUES(‘Lucy’,3);
当删除provinces中的id=叁的数据C时,相应的users第11中学的Lucy也会被删掉,更新的话一样如此;
SET
NULL://从父表删除或更新行,会设置子表中的外键列为NULL,假设利用该选项,必须保险子表列未有点名NOT
NULL
REST福特ExplorerICT://拒相对父表的删减或更新操作;
NO ACTION://标准的SQL语句,在MYSQL当中与RESTRICT相同
实在开辟中,大家很少使用物理的外键约束,而是使用逻辑约束;无理的外键约束唯有innoDB那种存款和储蓄引擎才会支撑,MYISAM那种外燃机就不扶助物理的外键约束。反过来讲,当我们采取到的引擎为MYISAM时,只可以动用逻辑外键(即五个表的规划的逻辑关系)。
外键约束的参照操作:
1、CASCADE:从父表删除或更新且自动删除或更新子表中十分的行。
二、SET
NULL:从父表删除或更新行,并设置子表中的外键列为NULL。假若选择该选项,必须保障子列表未有点名NOT
NULL。
三、REST智跑ICT:拒相对父表的去除或更新操作。
4、NO ACTION:标准SQL的显要字,在MySQL中与RESTHighlanderICT一样。
FOREIGN KEY (子表列名) REFERENCES FROM 父表名(父表列名)[ON
DELETE|UPDATE CASCADE|SET NULL|RESTRICT|NO ACTION];
在骨子里开荒中,存款和储蓄引擎不为INNODB,无法利用FOREIGN
KEY,普及选用逻辑方式。
.表级约束与列级约束
一.表级约束与列级约束
(一)对一个数据列建立的约束,称为列级约束
(2)对三个数据列建立的牢笼,称为表级约束
(三)列级约束既能够在列定义时声称,也得以在列定未来申明
(④)表级约束只可以在列定义后宣称
二.主键、外键、非空、唯1、default都以束缚原则。主键、外键、唯1既能够用作表级约束,也可看作列级约束
( not null, default )只有列级约束
增添封锁
一.增多主键约束
CONSTRAINT_PK主键名称为PK
ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] PRIMARY KEY
[index_type] (index_col_name,…)
e.g:ALTER TABLE users ADD CONSTRAINT PK_users_id PRIMARY KEY (id);
贰.增加唯一约束
ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY]
[index_name] [index_type] (index_col_name,…)
e.g:ALTER TABLE users ADD UNIQUE (username);
3.增多外键约束
ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] FOREIGN KEY
[index_name](index_col_name,…) reference_definition
e.g:ALTER TABLE users ADD FOREIGN KEY (pid) REFERENCES provinces (id)
肆.增多/删除默许约束 DEFAULT
ALTER TABLE tbl_name ALTER [COLUMN] col_name {SET DEFAULT literal |
DROP DEFAULT}
e.g:
ALTER TABLE users ADD age TINYINT UNSIGNED NULL;
ALTER TABLE users ALTER age SET DEFAULT 15;
ALTER TABLE users ALTER age DROP DEFAULT;
删去约束
一约束的 index_name 可通过 SHOW INDEX FROM table_name\G; 查询
剔除主键约束:
ALTER TABLE table_name DROP PRIMARY KEY;
除去唯一约束:
ALTER TABLE table_name DROP INDEX index_name;
删除却键约束:
ALTER TABLE table_name DROP FOREIGN KEY
(fk_symbol)通过查询系统暗中同意给的名字;
外键约束的名字 fk_symbol 可通过 SHOW CREATE TABLE table_name; 查询
剔除此而外键约束,查找CREATE TABLENAME 找到系统为外键约束增加的名字
添加/删除列
1、增加单列:假若钦定FI奥迪Q5ST,则在全方位表的最前沿,暗许不写为任何表的终极方;要是钦点AFTE奥迪Q5col_name,则在col_name的后面。
ALTER TABLE tbl_name ADD [COLUMN] col_name column_definition
[FIRST AFTER col_name]
二、添增多列:不可能钦赐FI凯雷德ST/AFTE普拉多、只可以默以为最终方。
ALTER TABLE tbl_name ADD [COLUMN] (col_name
column_definition,…)
三、删除单列
ALTER TABLE tbl_name DROP [COLUMN] col_name
四、删除多列(Ps:删除一列的还要,新扩充一列。其间用逗号隔离)
ALTER TABLE tbl_name DROP [COLUMN] col_name, DROP [COLUMN]
col_name,DROP [COLUMN] col_name

默认值DEFAULT

通过 DEFAULT
来设置暗中同意值,若是在插入数据时没给给出相应的值,那么就用暗中认可的,上边包车型客车例子便是安装number的暗中同意值为三,在插入数据的时候,因为未有给出number,所以默感觉叁。

mysql> CREATE TABLE table5(
    -> number ENUM("1","2","3") DEFAULT "3",
    -> username VARCHAR(20)
    -> );
Query OK, 0 rows affected (0.41 sec)

mysql> INSERT table5(username) VALUES("Luo");
Query OK, 1 row affected (0.10 sec)

mysql> INSERT table5(username) VALUES("Fang");
Query OK, 1 row affected (0.15 sec)

mysql> SELECT * FROM table5;
+--------+----------+
| number | username |
+--------+----------+
| 3      | Luo      |
| 3      | Fang     |
+--------+----------+
2 rows in set (0.00 sec)

默认值DEFAULT

通过 DEFAULT
来设置私下认可值,倘使在插入数据时没给给出相应的值,那么就用暗中同意的,上边包车型地铁事例就是设置number的暗中认可值为叁,在插入数据的时候,因为尚未给出number,所以私下认可为3。

mysql> CREATE TABLE table5(
    -> number ENUM("1","2","3") DEFAULT "3",
    -> username VARCHAR(20)
    -> );
Query OK, 0 rows affected (0.41 sec)

mysql> INSERT table5(username) VALUES("Luo");
Query OK, 1 row affected (0.10 sec)

mysql> INSERT table5(username) VALUES("Fang");
Query OK, 1 row affected (0.15 sec)

mysql> SELECT * FROM table5;
+--------+----------+
| number | username |
+--------+----------+
| 3      | Luo      |
| 3      | Fang     |
+--------+----------+
2 rows in set (0.00 sec)

997755.com澳门葡京 1

操作数据表中的笔录
INSERT 插入记录
一、INSERT 插入记录
语法1:INSERT [INTO] 表名 [(列名1,列名2,…)]
VALUES(列值1,列值2,…),(…),…;
对此电动编号的字段,插入“NULL”或“DEFAULT”系统将电动依次递增加编写制定号;
对于有私下认可约束的字段,能够插入“DEFAULT”表示使用暗中同意值;
列值可传唱数值、表明式或函数,如密码能够用md5()函数实行加密(如md5(‘1二三’));
可同时插入多条记下,多条记录括号间用逗号“,”隔离
语法2:INSERT [INTO] 表名 SET 列名1=列值1, 列名2=列值2,…;
那种办法三次只可以插入一条记下;列值中有机关编号、暗许值或Boolean类型均能够不赋值(使用子查询)
语法3:INSERT [INTO] 表名(列名1,…) SELECT 列名1,… FROM 表名
[GROUP BY/HAVING/ORDER BY/LIMIT…];
诚如用来将别的表的数目插入到钦定表,注意相应
二、单表更新 UPDATE
UPDATE 表名 SET 列名1=列值1 [,列名2=列值2, …] [WHERE
条件];(如条件为 列名=列值 修改某一字段的值)
粗略条件则更新具备记录该列的值
3、单表删除 DELETE
DELETE FROM 表名 [WHERE 条件];
一言以蔽之条件则默许删除该表全部记录(仅删除全部记录,不删除数据表);
插入自动编号的字段时,号数为已部分最大号数+一,固然中间有空号数也是如此(如12356,插入记录后为12356七)
INSERT// 插入记录
第一种:
insert tb_name
[column_name]values(…)[,(…),(….)];–相比较常用,能够1遍性插入多条记下,并且能够输入表达式甚至是函数,不过力不从心开始展览子查询。
第二种:
insert tb_name set
column_name={exprdefault};–能够开始展览子查询,然而只能插入一条记下的多个字段,但一遍只好插入一条记下(INSERT
[INTO] 表名 SET 列名1=列值1, 列名2=列值2,…;)。
第三种:
insert table_name [(colname…)]
select语句…..–这种方法正是把询问到的2个表结果插入到另一个内定数量表中。
单表更新
单表更新:
UPDATE [LOW_PRIORITY] [IGNORE] table_reference SET
col_name1={exp1|DEFAULT}[,col_name2=…][WHERE where_condition]
【1般的话要用WHERE钦定位置,不然全体数据都会被更新】
例:
不钦定地方:UPDATE users set age = age + 5,sex = 0;
使表里全数记录的age加5
点名地方: UPDATE users set age = age+ + 10 WHERE id % 2=0;
取id为偶数的地点
update更新数据
update <表名>
set <列名>=<表达式>,[,<列名>=<表达式>]…
[where <条件>];
删去记录
一、删除记录DELETE:分为单表删除和多表删除
二、单表删除:DELETE FROM tbl_name [WHERE where_conditon];
三、若不增多WHERE则删除【全体笔录】
除去后再插入,插入的id号从最大的往上加,而不是互补删除的。
delete from users where id=6;
insert users values (null,’11壹’,’222′,33,null);
删除后再插入,插入的id号从最大的往上加,而不是补充删除的。
询问表明式
每八个表达式表示想要的1列,必须至少有3个
四个列之间以英文逗号分隔
星号(*)表示为此列 tbl_name.*可以表示命名表的具有列
询问表明式能够动用[As]alias_name为其给予小名
别名可用以GROUP BY,O安德拉DRE BY或HAVING子句
SELECT 字段出现顺序影响结果集出现顺序,字段别名也潜移默化结果集字段外号。
①、查找记录
1、语法:
SELECT select_expr [,select expr2…] 只查找某2个函数或表明式
[
FROM table_references 查询表名
[WHERE where_conditon] 查询条件
[GROUP BY {col_name|position} [ASC|DESC],…]
按有些字段举办分组,同样的只展现第1个
[HAVING where_conditon] 分组时,给出呈现标准
[ORDER BY {col_name|expr|position} [ASC|DESC],…] 排序
[LIMIT {[offset,]row_count|row_count OFFSET offset}]
限制再次回到数量
}
2、查询表明式的一1会影响结果顺序
各样表明式表示想要的一列,必须有起码七个
多个列直接以英文逗号分隔
星号*表示全体列
3、使用tbl_name.col_name来代表列记录,那多表查询时可以区分开同名的列
4、使用[AS] alias_name为其给予别称,别称能够用于GROUP BY、OLX570DER
BY或HAVING子句,例如SELECT id AS userId,username AS uname FROM users;
这样查询出来的结果会用小名表示

where 条件表明式
where 后各个依照规则(>、<、=、>=、<=、!=、<>、IS NOT
NULL),依照逻辑(and,or),依据结合艺术left join、right
join等,依据形式相称(IN、NOT IN、like、not
like、regexp),使用种种MySQL函数和表明式,从表集合中筛选记录。
条件表明式
对记录实行过滤, 如若未有点名WHERE子句,则显示全部记录。
在WHERE表明式中,能够利用MySQL支持的函数或运算符。
查询结果分组 GROUP BY
[GROUP BY {col_name|position} [ASC|DESC],…]
ASC:升序,默认
DESC:降序
position:SELECT语句中列的序号
eg. ELECT sex FROM users GROUP BY sex;对users中的sex按sex进行分组
eg. SELECT * FROM users GROUP BY
1;(这里的一意味查询的首先个字段,这里询问全数字段音讯,第二个字段正是id,所以会依据id字段进行分组)
一表示SELECT语句中第二个冒出的字段,即地方。
建议BY后写列名称,不写地点,因为职分还要人为数。
留意:假诺存在同样的值(例如地点的age可能有多个一律的值),只会保留一个。但运用OLANDDER
BY 就不会轻松。
having 语句分组
having 语句分组,用在group
by前面扩张条件,推断式中的字段是必须出现在前面select中的
恐怕是足以涵盖未有出以往前头查询中的字段的多个聚合函数count(),max()等等
[HAVING when where_condition]
SELECT sex FROM users GROUP BY 1 HAVING age > 35; //有错
SELECT sex, age FROM users GROUP BY 1 HAVING age > 35;
SELECT sex FROM users GROUP BY 1 HAVING count(id) >= 2;
(那条指令,指依据sex分组,分成了两组sex=0和sex=NULL,条件id数大于二的预留展现,明显sex=0个数有八>二故留下,而sex=NULL个数为壹,不满足条件,故不显得。若是基准改成count(id)>=1,则会议及展览示sex为0和NULL五个分组。)
聚合函数长久唯有二个回去结果
count是记录个数的,
** HAVING 分组条件 **
并未 HAVING 时,GROUP BY 是对壹切记录举行分组并展现结果。
有 HAVING 时,对总体记录分组后只把适合HAVING条件的笔录显示出来。
举例:SELECT username,age FROM users GROUP BY age HAVING
count(id)>=2;
那句话的意味是:根据age分组后,把组员数量超过等于2的组突显出来。
order by对查询结果实行排序
order by
对查询结果进行排序,默许是升序
order by{col_name}
select * from users order by id desc; //对叁个字段排序
select * from users order by age,id desc; //多个字段同时排序
desc是降序
一、对查询结果开展排序:[ORDER BY [col_name | expr | position }
[ASC|DESC],…]elect * from user order by id desc;
二、能够而且按多条字段举办排序,规则是先按前边的字段排,在基础上再按后边字段排。
3、如:SELECT * FROM users O帕杰罗DE昂Cora BY age,id DESC;
先依据age排序,假若age有重复的,重复的字段里按id排序
LIMIT:限制查询结果回到的数据
[LIMIT {[offset,] row_count|row_count OFFSET offset}]
SELECT语句从0起初编号
offset:偏移量
row_count:再次来到结果的数目 [LIMIT{[offset,]row_countrow_count
OFFSET offset}]
eg. SELECT * FROM users LIMIT 二; //
从第2条开端(第三个为0),再次来到两条
SELECT * FROM users LIMIT 二,三 ;//从第2条初叶(第6个为0),再次回到三条
其三种insert,数据从一个表插入到另三个表
将查询结果写入到另一个数据表中:
INSERT table_name(column_name) SELECT …
eg:
INSERT test SELECT username FROM users WHERE age >=30; //
字段不包容提醒
INSERT test(username) SELECT username FROM users WHERE age >=30;
{
对照分组:
SELECT sex, age FROM users GROUP BY 1 HAVING age > 35;
分组用的是HAVING要求HAVING后的尺度照旧是聚合函数,要么字段在前头出现;
而插入用的是WHERE 未有以上关联的多个限制
}
总结
记录操作:增,改,删,查
INSERT://扩展记录,有二种办法。
INSERT [INTO] tbl_name [(col_name,…)] {VALUES | VALUE}
({expr|DEFAULT},…),(…),…
INSERT [INTO] tbl_name SET col_name={expr|DEFAULT},…
INSERT [INTO] tbl_name [(col_name,…)] SELECT…
UPDATE://更新数据
单表更新
UPDATE [LOW_PRIORITY][IGNORE] table_reference SET
col_name1={expr1|DEFAULT},[col_name2={expr2|DEFAULT}]…[WHERE
where_condition]
多表更新
DELETE : //删除数据
单表删除
DELETE FROM tbl_name [WHERE where_condition}
多表删除
SELECT: //查询
SELECT select_expr [,select expr2…] 只查找某贰个函数或表明式
[
FROM table_references 查询表名
[WHERE where_conditon] 查询条件
[GROUP BY {col_name|position} [ASC|DESC],…]
按某些字段进行分组,同样的只体现第三个
[HAVING where_conditon] 分组时,给出展现标准
[ORDER BY {col_name|expr|position} [ASC|DESC],…] 排序
[LIMIT {[offset,]row_count|row_count OFFSET offset}]
限制重回数量
]

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website