Mysql表操作

一、存诸引擎

存储引擎可以说是表类型,mysql根据不同的表类型有不同的存取机制,如果想了解请打开:

https://blog.csdn.net/miaoqinian/article/details/80242068

二 、表介绍

    为了能简单容易明白理解表,可以把表当作文件,表中的一条记录,可以当成文件中的一行内容。不同的是表中的第一行内容,都有相对应的标题,我们称这个标题为字段。

来看一个简单的表:


其中:id,name,age,sex都是字段。

其中:1,monicx,23,male这一行称为一个记录。


三、 创建表的完整语法

        create table 表名(
        字段名1 类型[(宽度) 约束条件],
        字段名2 类型[(宽度) 约束条件],
        字段名3 类型[(宽度) 约束条件]
        );

解释:
类型:使用限制字段必须以什么样的数据类型存值
约束条件:约束条件是在类型之外添加一种额外的限制

注意:
1、在同一张表中,字段名是不能相同。
2、字段名和类型是必须有的,宽度和约束条件是可选的。

3、最后一个字段后不加逗号。

创建一个表:


查看这个表结构:


向表中写入两行记录:


查看这看表中的所用内容:


四、表中的数据类型

可以详查看:http://www.runoob.com/mysql/mysql-data-types.html

Mysql中的主要类型有,整型,浮点型,字符型,日期类型,枚举与集合类型。

整型:
1、作用:id号,各种号码,年龄,等级
2、主要分类:tinyint、int (重点常用)、bigint
3、测试:默认整型都是有符号的
create table t1(x tinyint);
insert into t1 values(128),(-129);

 

tinyint的最范围是-128~127。所以才会取得到上面的结果。

create table t2(x tinyint unsigned);
insert into t2 values(-1),(256);

create table t3(x int unsigned);
insert into t3 values(4294967296);

 create table t4(x int(12) unsigned);
 insert into t4 values(4294967296123);

 

对于整型来说,数据类型后的宽度并不是存储限制,而是显示限制。

所以在创建表时,如果字段采用的是整型类型,完全无需指定显示宽度,默认的显示宽度,足够显示完整当初存放的数据。


 来个例子:表中数据显示时,不够8位用0填充,如果超出8位则正常显示
create table t5(x int(8) unsigned zerofill);
insert into t5 values(4294967296123);
insert into t5 values(1);

    

浮点型
作用:存储身高、体重、薪资
分类:
float (主要常用)、double 、decimal 
测试:
相同点:对于三者来说,都能存放30位小数,
不同点:
1、精度的排序从低到高:float,double,decimal
2、float与double类型能存放的整数位比decimal更多
create table t9(x float(255,30));
create table t10(x double(255,30));
create table t11(x decimal(65,30));

insert into t9 values(1.111111111111111111111111111111);
insert into t10 values(1.111111111111111111111111111111);
insert into t11 values(1.111111111111111111111111111111);


字符型
1、作用:姓名,地址,描述类的信息
2、分类:char 定长、varchar 变长
3、测试:字符的宽度限制单位是字符个数
create table t12(x char(4)); # 超出4个字符取4个,不够4个字符则用空格补全成4个字符
create table t13(y varchar(4));# 超出4个字符取4个,不够4个字符那么字符有几个就存几个

注意:

针对char类型,mysql在存储时会将数据用空格补全存放到硬盘中,但会在读出结果时自动去掉末尾的空格

对比char与varchar

char(15)

缺点:浪费空间
优点:存取速度都快
固定以15个字节的长度存数据 

varchar(15)
缺点:存取速度都慢
优点:节省空间

(1bytes+数据)(1bytes+数据)(1bytes+数据)

日期类型
1、作用:时间相关
2、分类:
date:1999-01-27
time: 11:11:11
datetime:1999-01-27 11:11:11
year:1999

3、测试

create table student(
    id int,
    name char(16),
    born_year year,
    birth date,
    class_time time,
    reg_time datetime
);
insert into student values(1,'monicx','1995','1995-04-14','08:30:00','2013-11-11 11:11:11');


枚举类和集合类
枚举enum,多选一个
集合set,多选多
测试
create table teacher(
    id int,
    name char(16),
    sex enum('male','female','others'),
    hobbies set('read','music','running')
);

五、表的完整性约束

约束条件与数据类型的宽度一样,都是可选参数
作用:用于保证数据的完整性和一致性

主要分为:

PRIMARY KEY (PK)        标识该字段为该表的主键,可以唯一的标识记录
FOREIGN KEY (FK)        标识该字段为该表的外键
NOT NULL         标识该字段不能为空
UNIQUE KEY (UK)         标识该字段的值是唯一的
AUTO_INCREMENT      标识该字段的值自动增长(整数类型,而且为主键)
DEFAULT         为该字段设置默认值
UNSIGNED      无符号

ZEROFILL      使用0填充

not null与default通常是连用的。

#not null + default
create table t15(
    id int,
    name char(16) not null,
    sex enum('male','female') not null default "male"
);

insert into t15(id,name) values
(1,'monicx1'),
(2,'monicx2'),
(3,'monicx3');
unique的使用,可以单列,也可以联合多列组合唯一。
#unique:限制字段的值唯一

#单列唯一
create table t16(
    id int unique,
    name char(16)
);


# 联合唯一
create table server(
    id int unique,
    ip char(15),
    port int,
    unique(ip,port)
);
primary key:单单从约束角度去看,primary key就等同于not null unique
强调:
1、一张表中必须有,并且只能有一个主键

2、一张表中都应该有一个id字段,而且应该把id字段做成主键

create table t17(
    id int primary key,
    name char(16),
    age int,
    sex char(6)
)engine=innodb;


#联合主键
create table t19(
    ip char(15),
    port int,
    primary key(ip,port)
);
auto_increment注意点:
1、通常与primary key连用,而且通常是给id字段加

2、auto_increment只能给被定义成key(unique key,primary key)的字段使用。

create table t20(
    id int primary key auto_increment,
    name char(16)
)engine=innodb;

foreign key是一个比较有深度的约束。如果想深入了解:

https://blog.csdn.net/miaoqinian/article/details/80252715

六、修改表

1. 修改表名
    ALTER TABLE 表名 RENAME 新表名;

2. 增加字段
    ALTER TABLE 表名 ADD 字段名  数据类型 [完整性约束条件…],

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

    ALTER TABLE 表名 ADD 字段名  数据类型 [完整性约束条件…]  FIRST;
    ALTER TABLE 表名 ADD 字段名  数据类型 [完整性约束条件…]  AFTER 字段名;
                            
3. 删除字段
    ALTER TABLE 表名 DROP 字段名;

4. 修改字段
    ALTER TABLE 表名 MODIFY  字段名 数据类型 [完整性约束条件…];
    ALTER TABLE 表名 CHANGE 旧字段名 新字段名 旧数据类型 [完整性约束条件…];

    ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…];

七、复制表

复制表结构+记录 (key不会复制: 主键、外键和索引)
create table new_service select * from service;
只复制表结构
create table new1_service select * from service where 1=2;  

因为条件为假,查不到任何记录

复制表结构也可以使用下面的方法:

 


八、删除表

DROP TABLE 表名;



猜你喜欢

转载自blog.csdn.net/miaoqinian/article/details/80239554