mysql库和表_MySQL库和表的操作

MySQL库和表的操作

库操作

创建库

1.1 语法

CREATE DATABASE 数据库名 charset utf8;

1.2 数据库命名规则

可以由字母、数字、下划线、@、#、$

区分大小写

唯一性

不能使用关键字如 create select

不能单独使用数字

最长128位

其他操作

1 查看数据库

show databases;

show create database db1;

select database();

2 选择数据库

USE 数据库名

3 删除数据库

DROP DATABASE 数据库名;

4 修改数据库

alter database db1 charset utf8;

表操作

创建表

建表语法

create table 表名(

字段名1 类型[(宽度) 约束条件],

字段名2 类型[(宽度) 约束条件],

字段名3 类型[(宽度) 约束条件]

);

#注意:

1. 在同一张表中,字段名是不能相同

2. 宽度和约束条件可选、非必须,宽度指的就是字段长度约束,例如:char(10)里面的10

3. 字段名和类型是必须的

表操作简单示例

mysql> create database db1 charset utf8;

mysql> use db1;

mysql> create table t1(

-> id int,

-> name varchar(50),

-> sex enum('male','female'),

-> age int(3)

-> );

mysql> show tables; #查看db1库下所有表名

mysql> desc t1;

+-------+-----------------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-------+-----------------------+------+-----+---------+-------+

| id | int(11) | YES | | NULL | |

| name | varchar(50) | YES | | NULL | |

| sex | enum('male','female') | YES | | NULL | |

| age | int(3) | YES | | NULL | |

+-------+-----------------------+------+-----+---------+-------+

mysql> select id,name,sex,age from t1;

Empty set (0.00 sec)

mysql> select * from t1;

Empty set (0.00 sec)

mysql> select id,name from t1;

Empty set (0.00 sec)

插入数据简单操作

mysql> insert into t1 values

-> (1,'chao',18,'male'),

-> (2,'sb',81,'female')

-> ;

mysql> select * from t1;

+------+------+------+--------+

| id | name | age | sex |

+------+------+------+--------+

| 1 | chao | 18 | male |

| 2 | sb | 81 | female |

+------+------+------+--------+

mysql> insert into t1(id) values

-> (3),

-> (4);

mysql> select * from t1;

+------+------+------+--------+

| id | name | age | sex |

+------+------+------+--------+

| 1 | chao | 18 | male |

| 2 | sb | 81 | female |

| 3 | NULL | NULL | NULL |

| 4 | NULL | NULL | NULL |

+------+------+------+--------+

查看表结构

看语法

mysql> describe t1; #查看表结构,可简写为:desc 表名

+-------+-----------------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-------+-----------------------+------+-----+---------+-------+

| id | int(11) | YES | | NULL | |

| name | varchar(50) | YES | | NULL | |

| sex | enum('male','female') | YES | | NULL | |

| age | int(3) | YES | | NULL | |

+-------+-----------------------+------+-----+---------+-------+

mysql> show create table t1\G; #查看表详细结构,可加\G

基础数据类型

数值类型

整数类型:TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT

作用:存储年龄,等级,id,各种号码等

761613f67fcf6b5bb7a810822f736cbb.png

注意:对于整型来说,数据类型后面的宽度并不是存储长度限制,而是显示限制,假如:int(8),那么显示时不够8位则用0来填充,够8位则正常显示,通过zerofill来测试,存储长度还是int的4个字节长度。默认的显示宽度就是能够存储的最大的数据的长度,比如:int无符号类型,那么默认的显示宽度就是int(10),有符号的就是int(11),因为多了一个符号,所以我们没有必要指定整数类型的数据,没必要指定宽度,因为默认的就能够将你存的原始数据完全显示。

浮点型

定点数类型 DEC,等同于DECIMAL

浮点类型:FLOAT DOUBLE

作用:存储薪资、身高、温度、体重、体质参数等

1.FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]

定义:

单精度浮点数(非准确小数值),m是整数部分+小数部分的总个数,d是小数点后个数。m最大值为255,d最大值为30,例如:float(255,30)

有符号:

-3.402823466E+38 to -1.175494351E-38,

1.175494351E-38 to 3.402823466E+38

无符号:

1.175494351E-38 to 3.402823466E+38

精确度:

**** 随着小数的增多,精度变得不准确 ****

2.DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]

定义:

双精度浮点数(非准确小数值),m是整数部分+小数部分的总个数,d是小数点后个数。m最大值也为255,d最大值也为30

有符号:

-1.7976931348623157E+308 to -2.2250738585072014E-308

2.2250738585072014E-308 to 1.7976931348623157E+308

无符号:

2.2250738585072014E-308 to 1.7976931348623157E+308

精确度:

****随着小数的增多,精度比float要高,但也会变得不准确 ****

3.decimal[(m[,d])] [unsigned] [zerofill]

定义:

准确的小数值,m是整数部分+小数部分的总个数(负号不算),d是小数点后个数。 m最大值为65,d最大值为30。比float和double的整数个数少,但是小数位数都是30位

精确度:

**** 随着小数的增多,精度始终准确 ****

对于精确数值计算时需要用此类型

decimal能够存储精确值的原因在于其内部按照字符串存储。

精度从高到低:decimal、double、float

decimal精度高,但是整数位数少

float和double精度低,但是整数位数多

float已经满足绝大多数的场景了,但是什么导弹、航线等要求精度非常高,所以还是需要按照业务场景自行选择,如果又要精度高又要整数位数多,那么你可以直接用字符串来存。

浮点型测试示例

mysql> create table t1(x float(256,31));

ERROR 1425 (42000): Too big scale 31 specified for column 'x'. Maximum is 30.

mysql> create table t1(x float(256,30));

ERROR 1439 (42000): Display width out of range for column 'x' (max = 255)

mysql> create table t1(x float(255,30)); #建表成功

Query OK, 0 rows affected (0.02 sec)

mysql> create table t2(x double(255,30)); #建表成功

Query OK, 0 rows affected (0.02 sec)

mysql> create table t3(x decimal(66,31));

ERROR 1425 (42000): Too big scale 31 specified for column 'x'. Maximum is 30.

mysql> create table t3(x decimal(66,30));

ERROR 1426 (42000): Too-big precision 66 specified for 'x'. Maximum is 65.

mysql> create table t3(x decimal(65,30)); #建表成功

Query OK, 0 rows affected (0.02 sec)

mysql> show tables;

+---------------+

| Tables_in_db1 |

+---------------+

| t1 |

| t2 |

| t3 |

+---------------+

3 rows in set (0.00 sec)

mysql> insert into t1 values(1.1111111111111111111111111111111); #小数点后31个1

Query OK, 1 row affected (0.01 sec)

mysql> insert into t2 values(1.1111111111111111111111111111111);

Query OK, 1 row affected (0.00 sec)

mysql> insert into t3 values(1.1111111111111111111111111111111);

Query OK, 1 row affected, 1 warning (0.01 sec)

mysql> select * from t1; #随着小数的增多,精度开始不准确

+----------------------------------+

| x |

+----------------------------------+

| 1.111111164093017600000000000000 |

+----------------------------------+

1 row in set (0.00 sec)

mysql> select * from t2; #精度比float要准确点,但随着小数的增多,同样变得不准确

+----------------------------------+

| x |

+----------------------------------+

| 1.111111111111111200000000000000 |

+----------------------------------+

1 row in set (0.00 sec)

mysql> select * from t3; #精度始终准确,d为30,于是只留了30位小数

+----------------------------------+

| x |

+----------------------------------+

| 1.111111111111111111111111111111 |

+----------------------------------+

1 row in set (0.00 sec)

日期类型

类型:DATE,TIME,DATETIME ,TIMESTAMP,YEAR

作用:存储用户注册时间,文章发布时间,员工入职时间,出生时间,过期时间等

简单介绍

YEAR

YYYY(范围:1901/2155)2018

DATE

YYYY-MM-DD(范围:1000-01-01/9999-12-31)例:2018-01-01

TIME

HH:MM:SS(范围:'-838:59:59'/'838:59:59')例:12:09:32

DATETIME

YYYY-MM-DD HH:MM:SS(范围:1000-01-01 00:00:00/9999-12-31 23:59:59 Y)例: 2018-01-01 12:09:32

TIMESTAMP

YYYYMMDD HHMMSS(范围:1970-01-01 00:00:00/2037 年某时)

mysql的日期格式对字符串采用的是'放松'政策,可以以字符串的形式插入。

日期类型测试示例

year:

mysql> create table t10(born_year year); #无论year指定何种宽度,最后都默认是year(4)

mysql> insert into t10 values

-> (1900),

-> (1901),

-> (2155),

-> (2156);

mysql> select * from t10;

+-----------+

| born_year |

+-----------+

| 0000 |

| 1901 |

| 2155 |

| 0000 |

+-----------+

date,time,datetime:

mysql> create table t11(d date,t time,dt datetime);

mysql> desc t11;

+-------+----------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-------+----------+------+-----+---------+-------+

| d | date | YES | | NULL | |

| t | time | YES | | NULL | |

| dt | datetime | YES | | NULL | |

+-------+----------+------+-----+---------+-------+

mysql> insert into t11 values(now(),now(),now());

mysql> select * from t11;

+------------+----------+---------------------+

| d | t | dt |

+------------+----------+---------------------+

| 2017-07-25 | 16:26:54 | 2017-07-25 16:26:54 |

+------------+----------+---------------------+

timestamp:

mysql> create table t12(time timestamp);

mysql> insert into t12 values();

mysql> insert into t12 values(null);

mysql> select * from t12;

+---------------------+

| time |

+---------------------+

| 2017-07-25 16:29:17 |

| 2017-07-25 16:30:01 |

+---------------------+

============注意啦,注意啦,注意啦===========

1. 单独插入时间时,需要以字符串的形式,按照对应的格式插入

2. 插入年份时,尽量使用4位值

3. 插入两位年份时,<=69,以20开头,比如50, 结果2050

>=70,以19开头,比如71,结果1971

mysql> create table t12(y year);

mysql> insert into t12 values

-> (50),

-> (71);

mysql> select * from t12;

+------+

| y |

+------+

| 2050 |

| 1971 |

+------+

============综合练习===========

mysql> create table student(

-> id int,

-> name varchar(20),

-> born_year year,

-> birth date,

-> class_time time,

-> reg_time datetime);

mysql> insert into student values

-> (1,'sb1',"1995","1995-11-11","11:11:11","2017-11-11 11:11:11"),

-> (2,'sb2',"1997","1997-12-12","12:12:12","2017-12-12 12:12:12"),

-> (3,'sb3',"1998","1998-01-01","13:13:13","2017-01-01 13:13:13");

mysql> select * from student;

+------+------+-----------+------------+------------+---------------------+

| id | name | born_year | birth | class_time | reg_time |

+------+------+-----------+------------+------------+---------------------+

| 1 | sb1 | 1995 | 1995-11-11 | 11:11:11 | 2017-11-11 11:11:11 |

| 2 | sb2 | 1997 | 1997-12-12 | 12:12:12 | 2017-12-12 12:12:12 |

| 3 | sb3 | 1998 | 1998-01-01 | 13:13:13 | 2017-01-01 13:13:13 |

+------+------+-----------+------------+------------+---------------------+

字符串类型

类型:char,varchar

作用:名字,信息等等

注意:char和varchar括号内的参数指的都是字符的长度

#char类型:定长,简单粗暴,浪费空间,存取速度快

字符长度范围:0-255(一个中文是一个字符,是utf8编码的3个字节)

存储:

存储char类型的值时,会往右填充空格来满足长度

例如:指定长度为10,存>10个字符则报错(严格模式下),存<10个字符则用空格填充直到凑够10个字符存储

检索:

在检索或者说查询时,查出的结果会自动删除尾部的空格,如果你想看到它补全空格之后的内容,除非我们打开pad_char_to_full_length SQL模式(SET sql_mode = 'strict_trans_tables,PAD_CHAR_TO_FULL_LENGTH';)

#varchar类型:变长,精准,节省空间,存取速度慢

字符长度范围:0-65535(如果大于21845会提示用其他类型 。mysql行最大限制为65535字节,字符编码为utf-8:https://dev.mysql.com/doc/refman/5.7/en/column-count-limit.html)

存储:

varchar类型存储数据的真实内容,不会用空格填充,如果'ab ',尾部的空格也会被存起来

强调:varchar类型会在真实数据前加1-2Bytes的前缀,该前缀用来表示真实数据的bytes字节数(1-2Bytes最大表示65535个数字,正好符合mysql对row的最大字节限制,即已经足够使用)

如果真实的数据<255bytes则需要1Bytes的前缀(1Bytes=8bit 2**8最大表示的数字为255)

如果真实的数据>255bytes则需要2Bytes的前缀(2Bytes=16bit 2**16最大表示的数字为65535)

检索:

尾部有空格会保存下来,在检索或者说查询时,也会正常显示包含空格在内的内容

char和varchar性能对比

以char(5)和varchar(5)来比较,加入我要存三个人名:sb,ssb1,ssbb2

**char:**

优点:简单粗暴,不管你是多长的数据,我就按照规定的长度来存,5个5个的存,三个人名就会类似这种存储:sb ssb1 ssbb2,中间是空格补全,取数据的时候5个5个的取,简单粗暴速度快

缺点:貌似浪费空间,并且我们将来存储的数据的长度可能会参差不齐

**varchar:**

varchar类型不定长存储数据,更为精简和节省空间

例如存上面三个人名的时候类似于是这样的:sbssb1ssbb2,连着的,如果这样存,请问这三个人名你还怎么取出来,你知道取多长能取出第一个吗?(超哥,我能看出来啊,那我只想说:滚犊子!)

不知道从哪开始从哪结束,遇到这样的问题,你会想到怎么解决呢?还记的吗?想想?socket?tcp?struct?把数据长度作为消息头。

所以,varchar在存数据的时候,会在每个数据前面加上一个头,这个头是1-2个bytes的数据,这个数据指的是后面跟着的这个数据的长度,1bytes能表示2**8=256,两个bytes表示2**16=65536,能表示0-65535的数字,所以varchar在存储的时候是这样的:1bytes+sb+1bytes+ssb1+1bytes+ssbb2,所以存的时候会比较麻烦,导致效率比char慢,取的时候也慢,先拿长度,再取数据。

优点:节省了一些硬盘空间,一个acsii码的字符用一个bytes长度就能表示,但是也并不一定比char省,看一下官网给出的一个表格对比数据,当你存的数据正好是你规定的字段长度的时候,varchar反而占用的空间比char要多。

其他的字符串类型:BINARY、VARBINARY、BLOB、TEXT

d9a6332f537b94e9bf96d5c74918cde0.png

其他类型简单介绍

BINARY 和 VARBINARY 类似于 CHAR 和 VARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值值。

BLOB 是一个二进制大对象,可以容纳可变数量的数据。有 4 种 BLOB 类型:TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。它们区别在于可容纳存储范围不同。

有 4 种 TEXT 类型:TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT。对应的这 4 种 BLOB 类型,可存储的最大长度不同,可根据实际情况选择。

BLOB:

1._BLOB和_text存储方式不同,_TEXT以文本方式存储,英文存储区分大小写,而_Blob是以二进制方式存储,不分大小写。

2._BLOB存储的数据只能整体读出。

3._TEXT可以指定字符集,_BLO不用指定字符集。

枚举类型和集合类型

字段的值只能在给定范围中选择,如单选框,多选框,如果你在应用程序或者前端不做选项限制,在MySQL的字段里面也能做限制

enum 单选 只能在给定的范围内选一个值,如性别 sex 男male/女female

set 多选 在给定的范围内可以选择一个或一个以上的值(爱好1,爱好2,爱好3...)

示例:

枚举类型(enum)

An ENUM column can have a maximum of 65,535 distinct elements. (The practical limit is less than 3000.)

示例:

CREATE TABLE shirts (

name VARCHAR(40),

size ENUM('x-small', 'small', 'medium', 'large', 'x-large')

);

INSERT INTO shirts (name, size) VALUES ('dress shirt','large'), ('t-shirt','medium'),('polo shirt','small');

集合类型(set)

A SET column can have a maximum of 64 distinct members.

示例:

CREATE TABLE myset (col SET('a', 'b', 'c', 'd'));

INSERT INTO myset (col) VALUES ('a,d'), ('d,a'), ('a,d,a'), ('a,d,d'), ('d,a,d');

简单测试

mysql> create table consumer(

-> name varchar(50),

-> sex enum('male','female'),

-> level enum('vip1','vip2','vip3','vip4','vip5'), #在指定范围内,多选一

-> hobby set('play','music','read','study') #在指定范围内,多选多

-> );

mysql> insert into consumer values

-> ('xiaogui','male','vip5','read,study'),

-> ('taibai','female','vip1','girl');

mysql> select * from consumer;

+------+--------+-------+------------+

| name | sex | level | hobby |

+------+--------+-------+------------+

| xiaogui | male | vip5 | read,study |

| taibai | female | vip1 | |

+------+--------+-------+------------+

完整性约束

not null和default

是否可空,null表示空,非字符串

not null - 不可空

null - 可空

默认值,创建列时可以指定默认值,当插入数据时如果未主动设置,则自动添加默认值

create table tb1(

nid int not null defalut 2,

num int not null

);

先说一点:在我们插入数据的时候,可以这么写insert into tb1(nid,num) values(1,‘chao’);就是在插入输入的时候,指定字段插入数据,如果我在只给num插入值,可以这样写insert into tb1(num) values('chao');还可以插入数据的时候,指定插入数据字段的顺序:把nid和num换个位置,但是对应插入的值也要换位置。注意:即便是你只给一个字段传值了,那么也是生成一整条记录,这条记录的其他字段的值如果可以为空,那么他们就都是null空值,如果不能为空,就会报错。

简单测试

==================not null====================

mysql> create table t1(id int); #id字段默认可以插入空

mysql> desc t1;

+-------+---------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-------+---------+------+-----+---------+-------+

| id | int(11) | YES | | NULL | |

+-------+---------+------+-----+---------+-------+

mysql> insert into t1 values(); #可以插入空

mysql> create table t2(id int not null); #设置字段id不为空

mysql> desc t2;

+-------+---------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-------+---------+------+-----+---------+-------+

| id | int(11) | NO | | NULL | |

+-------+---------+------+-----+---------+-------+

mysql> insert into t2 values(); #不能插入空

ERROR 1364 (HY000): Field 'id' doesn't have a default value

==================default====================

#设置id字段有默认值后,则无论id字段是null还是not null,都可以插入空,插入空默认填入default指定的默认值

mysql> create table t3(id int default 1);

mysql> alter table t3 modify id int not null default 1;

==================综合练习====================

mysql> create table student(

-> name varchar(20) not null,

-> age int(3) unsigned not null default 18,

-> sex enum('male','female') default 'male',

-> hobby set('play','study','read','music') default 'play,music'

-> );

mysql> desc student;

+-------+------------------------------------+------+-----+------------+-------+

| Field | Type | Null | Key | Default | Extra |

+-------+------------------------------------+------+-----+------------+-------+

| name | varchar(20) | NO | | NULL | |

| age | int(3) unsigned | NO | | 18 | |

| sex | enum('male','female') | YES | | male | |

| hobby | set('play','study','read','music') | YES | | play,music | |

+-------+------------------------------------+------+-----+------------+-------+

mysql> insert into student(name) values('chao');

mysql> select * from student;

+------+-----+------+------------+

| name | age | sex | hobby |

+------+-----+------+------------+

| chao| 18 | male | play,music |

+------+-----+------+------------+

unique

独一无二,唯一属性:id,身份证号等

简单测试

============设置唯一约束 UNIQUE===============

方法一:

create table department1(

id int,

name varchar(20) unique,

comment varchar(100)

);

方法二:

create table department2(

id int,

name varchar(20),

comment varchar(100),

constraint uk_name unique(name)

);

mysql> insert into department1 values(1,'IT','技术');

Query OK, 1 row affected (0.00 sec)

mysql> insert into department1 values(1,'IT','技术');

ERROR 1062 (23000): Duplicate entry 'IT' for key 'name'

primary key

从约束角度看primary key字段的值不为空且唯一。

简单测试

============单列做主键===============

#方法一:not null+unique

create table department1(

id int not null unique, #主键

name varchar(20) not null unique,

comment varchar(100)

);

mysql> desc department1;

+---------+--------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+---------+--------------+------+-----+---------+-------+

| id | int(11) | NO | PRI | NULL | |

| name | varchar(20) | NO | UNI | NULL | |

| comment | varchar(100) | YES | | NULL | |

+---------+--------------+------+-----+---------+-------+

rows in set (0.01 sec)

#方法二:在某一个字段后用primary key

create table department2(

id int primary key, #主键

name varchar(20),

comment varchar(100)

);

mysql> desc department2;

+---------+--------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+---------+--------------+------+-----+---------+-------+

| id | int(11) | NO | PRI | NULL | |

| name | varchar(20) | YES | | NULL | |

| comment | varchar(100) | YES | | NULL | |

+---------+--------------+------+-----+---------+-------+

rows in set (0.00 sec)

#方法三:在所有字段后单独定义primary key

create table department3(

id int,

name varchar(20),

comment varchar(100),

constraint pk_name primary key(id); #创建主键并为其命名pk_name

mysql> desc department3;

+---------+--------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+---------+--------------+------+-----+---------+-------+

| id | int(11) | NO | PRI | NULL | |

| name | varchar(20) | YES | | NULL | |

| comment | varchar(100) | YES | | NULL | |

+---------+--------------+------+-----+---------+-------+

rows in set (0.01 sec

auto_increment

之前我们插入数据的时候,id也需要自己来写,是不是很麻烦啊,我们是不是想,只要有一条记录就直接插入进去啊,不需要考虑说,你现在存储到第多少条数据了,对不对,所以出现了一个叫做auto_increment的属性

约束字段为自动增长,被约束的字段必须同时被key约束,也就是说只能给约束成key的字段加自增属性,默认起始位置为1,步长也为1.

简单测试

#不指定id,则自动增长

create table student(

id int primary key auto_increment,

name varchar(20),

sex enum('male','female') default 'male'

);

mysql> desc student;

+-------+-----------------------+------+-----+---------+----------------+

| Field | Type | Null | Key | Default | Extra |

+-------+-----------------------+------+-----+---------+----------------+

| id | int(11) | NO | PRI | NULL | auto_increment |

| name | varchar(20) | YES | | NULL | |

| sex | enum('male','female') | YES | | male | |

+-------+-----------------------+------+-----+---------+----------------+

mysql> insert into student(name) values

-> ('egon'),

-> ('alex')

-> ;

mysql> select * from student;

+----+------+------+

| id | name | sex |

+----+------+------+

| 1 | egon | male |

| 2 | alex | male |

+----+------+------+

#也可以指定id

mysql> insert into student values(4,'asb','female');

Query OK, 1 row affected (0.00 sec)

mysql> insert into student values(7,'wsb','female');

Query OK, 1 row affected (0.00 sec)

mysql> select * from student;

+----+------+--------+

| id | name | sex |

+----+------+--------+

| 1 | egon | male |

| 2 | alex | male |

| 4 | asb | female |

| 7 | wsb | female |

+----+------+--------+

#对于自增的字段,在用delete删除后,再插入值,该字段仍按照删除前的位置继续增长

mysql> delete from student;

Query OK, 4 rows affected (0.00 sec)

mysql> select * from student;

Empty set (0.00 sec)

mysql> insert into student(name) values('ysb');

mysql> select * from student;

+----+------+------+

| id | name | sex |

+----+------+------+

| 8 | ysb | male |

+----+------+------+

#应该用truncate清空表,比起delete一条一条地删除记录,truncate是直接清空表,在删除大表时用它

mysql> truncate student;

Query OK, 0 rows affected (0.01 sec)

mysql> insert into student(name) values('egon');

Query OK, 1 row affected (0.01 sec)

mysql> select * from student;

+----+------+------+

| id | name | sex |

+----+------+------+

| 1 | egon | male |

+----+------+------+

1 row in set (0.00 sec)

表其他操作

修改表

看语法

语法:

1. 修改表名

ALTER TABLE 表名

RENAME 新表名;

2. 增加字段

ALTER TABLE 表名

ADD 字段名 数据类型 [完整性约束条件…], #注意这里可以通过逗号来分割,一下添加多个约束条件

ADD 字段名 数据类型 [完整性约束条件…];

ALTER TABLE 表名

ADD 字段名 数据类型 [完整性约束条件…] FIRST; #添加这个字段的时候,把它放到第一个字段位置去。

ALTER TABLE 表名

ADD 字段名 数据类型 [完整性约束条件…] AFTER 字段名;#after是放到后的这个字段的后面去了,我们通过一个first和一个after就可以将新添加的字段放到表的任意字段位置了。

3. 删除字段

ALTER TABLE 表名

DROP 字段名;

4. 修改字段

ALTER TABLE 表名

MODIFY 字段名 数据类型 [完整性约束条件…];

ALTER TABLE 表名

CHANGE 旧字段名 新字段名 旧数据类型 [完整性约束条件…]; #change比modify还多了个改名字的功能,这一句是只改了一个字段名

ALTER TABLE 表名

CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…];#这一句除了改了字段名,还改了数据类型、完整性约束等等的内容

​给一个字段添加外键属性的语句:alter table 表2名 add foreign key(表2的一个字段) references 表1名(表1的一个字段);

​注意一点:在mysql里面表名是不区分大小写的,如果你将一个名为t1的(小写的t1)改名为一个T1(大写的T1),是完全没用的,因为在数据库里面表名都是小写的。

简单测试

示例:

1. 修改存储引擎

mysql> alter table service

-> engine=innodb;

2. 添加字段

mysql> alter table student10

-> add name varchar(20) not null,

-> add age int(3) not null default 22;

mysql> alter table student10

-> add stu_num varchar(10) not null after name; //添加name字段之后

mysql> alter table student10

-> add sex enum('male','female') default 'male' first; //添加到最前面

3. 删除字段

mysql> alter table student10

-> drop sex;

mysql> alter table service

-> drop mac;

4. 修改字段类型modify

mysql> alter table student10

-> modify age int(3);

mysql> alter table student10

-> modify id int(11) not null primary key auto_increment; //修改为主键

5. 增加约束(针对已有的主键增加auto_increment)

mysql> alter table student10 modify id int(11) not null primary key auto_increment;

ERROR 1068 (42000): Multiple primary key defined

mysql> alter table student10 modify id int(11) not null auto_increment;

Query OK, 0 rows affected (0.01 sec)

Records: 0 Duplicates: 0 Warnings: 0

6. 对已经存在的表增加复合主键

mysql> alter table service2

-> add primary key(host_ip,port);

7. 增加主键

mysql> alter table student1

-> modify name varchar(10) not null primary key;

8. 增加主键和自动增长

mysql> alter table student1

-> modify id int not null primary key auto_increment;

9. 删除主键

a. 删除自增约束

mysql> alter table student10 modify id int(11) not null;

b. 删除主键

mysql> alter table student10

-> drop primary key;

查看所有表

show tables;

删除表

drop table 表名;

清空表

delete from 表名;

truncate 表名; #会将auto_increment的起始数据重置为1。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值