mysql 创建表 text_MySQL基础-2

配置文件的使用

大家发现每次进入mysql都需要进行登录操作,而且服务器的编码为Latin1,客户端的编码为GBK,这样就很容易造成乱码,所以我们就需要进行一个统一

在根目录(程序安装的路径)下创建一个配置文件,名称为my.ini

内容为cfg格式,即section+option

[mysqld] 分区为服务器端配置,修改后需要重启服务器

[mysql] 分区为客户端配置,修改后需要进行重连

统一编码方式配置文件:

# 客户端配置

[client]

user = root

password = 你的密码

default-character-set = utf8

# 服务器端配置 需要重启服务器

[mysqld]

character-set-server = utf8

表的分类——数据库引擎

数据库引擎是数据库最核心的部分,地位相当于人类的心脏,它是负责存储数据的模块

可以通过 show engines; 查看引擎

59dc76b243673b28916288d9e1f332a3.png

可以看到,mysql里面有好几个引擎,但到底那个好呢?

这个是没有定论的,每个引擎有不同的作用,我们要根据实际需求来选择合适的引擎

Mysql数据库默认引擎为InnoDB

创建表指定引擎

create table 名称(字段 类型 ) engine = XXXX;

简单的表的增删改查(CRUD)

# 插入数据

insert into 表名 values(数据1,数据2,……); # 该方式必须保证插入的数据个数和表格字段数量一样

# 选择部分字段插入

insert into 表名(字段名称1,字段名称2) values(数据1,数据2); # 该方式必须保证插入的数据个数与指定的字段数量一样

# 同时插入多个记录

insert into 表名(字段名称1,字段名称2) values(数据1,数据2),(数据1,数据2);

# 查询所有记录

select * from 表名;

# 查询符合条件的字段

select 字段 from 表名 where 条件;

# 更新所有的记录

uptade 表名 set 字段1=新的值1,字段2=新的值2;

# 更新符合条件的记录

update 表名 set 字段1=新的值1,字段2=新的值2 where 条件;

# 删除所有记录

delete from 表名;

# 删除满足条件的记录

delete from 表名 where 条件;

创建表的完整写法

create table 表名(字段名称1 字段类型[(长度) 约束],字段名称1 字段类型[(长度) 约束]……) charset utf8;

Mysql中的数据类型

数字类型

60fd65bb981900d03222c058c05899f0.png

注意:

整型:

默认情况下为有符号的,需要设置为无符号要在增加unsigned约束

alter table 表名 modify 字段 数据类型 unsigned;

create table 表名(字段 数据类型 unsigned)

mysql 5.6 版本在默认情况下,为非加严模式,如果数据类型超过范围,就会自动取最大值,这样就不能保证数据的安全,所以可以在配置中设置为加严模式,或者临时设置sql_mode,但退出后又会恢复非加严模式

# 查看当前的sql模式

select @@sql_model # @ 表示全局变量 @@ 表示局部变量

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

| @@sql_mode |

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

| STRICT_TRANS_TABLES | # 当前为非加严模式

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

# 1.临时设置

set @@sql_mode = " STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION"

select @@sql_model

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

| @@sql_mode |

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

| STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION | # 加严模式

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

# 2.修改配置,永久有效

[mysqld]

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

指定长度

比如int(5),表示数据最小长度为5,如果数据不足5位,默认用空填充,如果要用0填充,需要增加zerofill约束

create table test(x int(5) zerofill);

insert into test values(2);

insert into test values(201780); # 证明5并不是限制最大长度的

select *from test;

+--------+

| x |

+--------+

| 00002 |

| 201780 |

+--------+

浮点型

数据类型(M,D) 表示整数位最大长度为M-D,超出则会报错,小数位最大长度为D,如果小数位超过了,则会自动进行四舍五入

create table test(x float(5,3));

insert into test values(2.56789);

Query OK, 1 row affected (0.21 sec)

select *from test;

+-------+

| x |

+-------+

| 2.568 |

+-------+

insert into test values(100); # 报错,最大只能为99.999

ERROR 1264 (22003): Out of range value for column 'x' at row 1

float类型 不需要指定位数,最大只能精确到小数点后5位

double类型 不需要指定位数,最大只能精确到小数点后15位

decimal类型 必须指定位数,长度最大为65,小数点后面最长为30

字符串类型

类型

大小

用途

CHAR

0-255字节

定长字符串

VARCHAR

0-65535 字节

变长字符串

TINYBLOB

0-255字节

不超过 255 个字符的二进制字符串

TINYTEXT

0-255字节

短文本字符串

BLOB

0-65 535字节

二进制形式的长文本数据

TEXT

0-65 535字节

长文本数据

MEDIUMBLOB

0-16 777 215字节

二进制形式的中等长度文本数据

MEDIUMTEXT

0-16 777 215字节

中等长度文本数据

LONGBLOB

0-4 294 967 295字节

二进制形式的极大文本数据

LONGTEXT

0-4 294 967 295字节

极大文本数据

char

定义时需要指定字符串长度,默认为1,比如char(10),表示最大只能有10个字符,超出长度自动取前10个字符,而少于10个字符的自动在前面补足空格

优点:读取速度快

缺点:浪费空间

varchar

定义时也需要指定字符串长度,但是和char的区别就是varchar不会自动补空格,而且varcher最终占⽤的空间为实际内容所占字节数+1,因为需要一个bit 存储字符长度

优点:节省空间

存取速度慢一些

char(4)

存储需求

varcher(4)

存储需求

‘’

' '

4个字节

''

1个字节

‘ab'

'ab '

4个字节

'ab'

3个字节

'abcd'

'abcd

4个字节

'abcd'

5个字节

'abcdefg'

'abcd'

4个字节

'abcd'

5个字节

text

存放长度较大的字符串

blob

存放的是二进制

枚举和集合

类型

大小

ENUM

对1-255个成员的枚举需要1个字节存储; 对于255-65535个成员,需要2个字节存储; 最多允许65535个成员。

SET

1-8个成员的集合,占1个字节 9-16个成员的集合,占2个字节 17-24个成员的集合,占3个字节 25-32个成员的集合,占4个字节 33-64个成员的集合,占8个字节

枚举是提前规定一个范围 你的值只能是其中之一 多选一

集合是提前规定一个范围 你的值可以是其中的多个 多选多

集合在插入数据时 ,多个值之前用逗号隔开 但他们必须包含在同一个字符串内!

create table t10 (name char(20),gender enum('female','male'));

Query OK, 0 rows affected (0.01 sec)

# 选择enum('female','male')中的一项作为gender的值,可以正常插入

insert into t10 values ('nick','male');

Query OK, 1 row affected (0.00 sec)

# 不能同时插入'male,female'两个值,也不能插入不属于'male,female'的值

insert into t10 values ('nick','male,female');

ERROR 1265 (01000): Data truncated for column 'gender' at row 1

create table t11 (name char(20),hobby set('抽烟','喝酒','烫头','翻车'));

Query OK, 0 rows affected (0.01 sec)

# 可以任意选择set('抽烟','喝酒','烫头','翻车')中的项,并自带去重功能

insert into t11 values ('tank','烫头,喝酒,烫头');

Query OK, 1 row affected (0.01 sec)

select * from t11;

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

| name | hobby |

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

| tank | 喝酒,烫头 |

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

row in set (0.00 sec)

# 不能选择不属于set('抽烟','喝酒','烫头','翻车')中的项,

insert into t11 values ('jason','烫头,翻车,看妹子');

ERROR 1265 (01000): Data truncated for column 'hobby' at row 1

时间和日期

类型

大小 (字节)

范围

格式

用途

DATE

3

1000-01-01/9999-12-31

YYYY-MM-DD

年月日

TIME

3

'-838:59:59'/'838:59:59'

HH:MM:SS

时分秒

YEAR

1

1901/2155

YYYY

年份值

DATETIME

8

0000-00-00 00:00:00/9999-12-31 23:59:59

YYYY-MM-DD\HH:MM:SS

年月日时分秒

TIMESTAMP

4

1970-01-01 00:00:00/2038 结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07

YYYYMMDD\HHMMSS

混合日期和时间值,时间戳

date/time/datatime类型

create table t4 (d date,t time,dt datetime);

Query OK, 0 rows affected (0.02 sec)

desc t4;

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

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

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

| d | date | YES | | NULL | |

| t | time | YES | | NULL | |

| dt | datetime | YES | | NULL | |

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

rows in set (0.01 sec)

insert into t4 values (now(),now(),now());

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

select * from t4;

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

| d | t | dt |

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

| 2018-09-21 | 14:51:51 | 2018-09-21 14:51:51 |

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

row in set (0.00 sec)

insert into t4 values (null,null,null);

Query OK, 1 row affected (0.01 sec)

select * from t4;

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

| d | t | dt |

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

| 2018-09-21 | 14:51:51 | 2018-09-21 14:51:51 |

| NULL | NULL | NULL |

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

rows in set (0.00 sec)

timestamp类型

create table t5 (id1 timestamp);

Query OK, 0 rows affected (0.02 sec)

desc t5;

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

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

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

| id1 | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |

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

row in set (0.00 sec)

# 插入数据null,会自动插入当前时间的时间

insert into t5 values (null);

Query OK, 1 row affected (0.00 sec)

select * from t5;

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

| id1 |

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

| 2018-09-21 14:56:50 |

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

row in set (0.00 sec)

#添加一列 默认值是'0000-00-00 00:00:00'

alter table t5 add id2 timestamp;

Query OK, 0 rows affected (0.02 sec)

Records: 0 Duplicates: 0 Warnings: 0

show create table t5 \G;

*************************** 1. row ***************************

Table: t5

Create Table: CREATE TABLE `t5` (

`id1` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

`id2` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00'

) ENGINE=InnoDB DEFAULT CHARSET=utf8

row in set (0.00 sec)

ERROR:

No query specified

# 手动修改新的列默认值为当前时间

alter table t5 modify id2 timestamp default current_timestamp;

Query OK, 0 rows affected (0.02 sec)

Records: 0 Duplicates: 0 Warnings: 0

show create table t5 \G;

*************************** 1. row ***************************

Table: t5

Create Table: CREATE TABLE `t5` (

`id1` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

`id2` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP

) ENGINE=InnoDB DEFAULT CHARSET=utf8

row in set (0.00 sec)

ERROR:

No query specified

insert into t5 values (null,null);

Query OK, 1 row affected (0.01 sec)

select * from t5;

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

| id1 | id2 |

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

| 2018-09-21 14:56:50 | 0000-00-00 00:00:00 |

| 2018-09-21 14:59:31 | 2018-09-21 14:59:31 |

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

rows in set (0.00 sec)

year类型

create table t7 (y year);

Query OK, 0 rows affected (0.02 sec)

insert into t7 values (2018);

Query OK, 1 row affected (0.00 sec)

select * from t7;

+------+

| y |

+------+

| 2018 |

+------+

row in set (0.00 sec)

注意:上述时间,两位数0-69 翻译为 2000-2069 70-99 翻译为1790-1999

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值