MySQL数据库

数据表的创建

create database school;#创建一个叫学校的数据库
 show databases;#显示数据库

数据库的使用

use school;#使用一个叫学校的数据库
drop database database_name;#删除数据库

创建数据库的表

create table class (class_id int,class_name varchar(128),class_teacher varchar(64));#在数据库中创建一个叫class的表,表头为Class_id、class_name、class_teacher。

create table《表名》(【表定义选项】【表选项】【分区选项】);

其中【表定义选项】的格式为:

create table 表名字(数据名 类型,......,数据名 类型);

create table命令语法比较多,其主要是有表创建定义(create_definition)、表选项(table_options)和分区选项(partition_options)所组成。

create table 语句的主要语法及使用说明:

        create table 用于创建给定名称的表,必须拥有表的create的权限。

        表名:·指定要创建表的名称,表名称可以被指定为 db_name.tbl_name,以便在特定的数据库中创建表。无论是否有当前数据库,都可以通过这种方式创建。在当前数据库中创建表时,可以省略 db-name。有些数据库可以使用加引号的识别名,例如,'mydb'.'mytbl' 是合法的,但 mysql 是不合法。

create table school.class(class_id int,class_name verchar(128),class_teacher varchar(128));#不选择数据库,直接用数据库的名字点出要创建的表

向表中插入数据

inset into class values(101,'六年级一班','马老师');#向一个叫class的表中插入数据,字符串用单引号引出

查询表中的数据

select *from class;#查询表class 中的全部记录

查询表中的某个表头

select *from class where class_id=101;#查询class表中class_id=101的全部数据

数据类型

数据类型字节数 无符号数的取值范围有符号数的取值范围
tinyint10~255-128~127
snakkubt20~65535-32768~32767
mediumint30~16777215-8388608~8388607
int4        0~4294967295-2147483648~2147483647
integer40~4294967295-2147483648~2147483647
bigint80~18446744073709551615-9223372036854775808~9223372036854775807
  1. 类型名称后面的小括号   指定显示宽度(并不是该类型占用字节数)。如果不显示指定宽度则默认为tinyint(3)、 smallint(5)、 mediumint(8)、 int(11) 和 bigint(20)。一般配合 zerofill 使用,顾名思义,zerofill 就是用“0”填充的意思,也就是在数字位数不够的空间用字符“0”填满。
  2. UNSIGNED(无符号)  如果需要在字段里面保存非负数或者需要较大的上限值时,可以用此选项,它的取值范围是正常值的下限取 0,上限取原值的 2 倍,例如,tinyint 有符号范围是-128~+127,而无符号范围是 0~255。如果一个列指定为 zerofill,则 MySQL 自动为该列添加 UNSIGNED 属性。 
  3. AUTO_INCREMENT  在需要产生唯一标识符或顺序值时,可利用此属性,这个属性只用于整数类型。AUTO_INCREMENT 值一般从 1 开始,每行增加 1。 一个表中最多只能有一个 AUTO_INCREMENT列 。对于任何想要使用 AUTO_INCREMENT 的列,应该定义为 NOT NULL,并定义为 PRIMARY KEY 或定义为 UNIQUE 键。 例如,可按下列任何一种方式定义 AUTO_INCREMENT 列: 

类型字节数负数的取值范围非负数的取值范围
float4

-3.402823644E+38~

-1.175494351E-38

0和1.175494351E-38~

3.402823466E+38

double8

-1.7976931348623157E+308~

-2.2250738585072014E-308

0和2.2250738585072014E-308~1.7976931348623157E+308

decimal(M,D)或dec(M,D)

M+2

-1.7976931348623157E+308~

-2.2250738585072014E-308

0和2.2250738585072014E-308~1.7976931348623157E+308
  • float数值类型用于表示单精度浮点数值,而double数值类型用于表示双精度浮点数值,float和double都是浮点型,而decimal是定点型;
  • MySQL 浮点型和定点型可以用类型名称后加(M,D)来表示,M表示该值的总共长度,D表示小数点后面的长度,M和D又称为精度和标度,如float(7,4)的 可显示为-999.9999,MySQL保存值时进行四舍五入,如果插入999.00009,则结果为999.0001。对于decimal,M是最大位数(精度),范围是1到65。可不指定,默认值是10。D是小数点右边的位数(小数位)。范围是0到30,并且不能大于M,可不指定,默认值是0。
类型字节数取值范围零值
year11901~21550000
date41000-01~9999-12-310000-00-00
time3-838:59:59~838:59:59000:00:00
datetime81000-01 00:00:00~9999-12-21 23:59:590000-00-00 00:00:00
timestamp41970-01-01 08:00:01~2038-01-19 11:40:7000000000000
use test;#选择数据库
create table date_example(e_date date,e_datetime datetime,e_timestamp timestamp,e_time time,e_year year);#创建表date_example
inset into date_example values('2020-5-9','2020-5-9 15:01:00','2020-05-09 15:01:00','15:56:01','2011');
inset into date_example values('2020_5/9', '2020:5-9 15/01-00', '2020:05/09 15-01_00',  '15:56:01', '2011');#效果同上

常用的时间函数:

CURDATE()  - 获得当前的DATE, 可直接插入DATE 类型中.

NOW() - 获得当前的DATETIME, 可直接插入DATETIME 和TIMESTAMP类型中.

TIME() - 获取参数给定时间串中的时分秒,可直接插入TIME 类型中.

YEAR() - 获取参数给定时间串中的年份,可直接插入YEAR类型中.

MONTH() 、DAY()、HOUR()、MINUTE()、SECOND() 获取参数给定时间串中的月、日、时、分、秒值.

mysql> use test;   #选择数据库test 
mysql> insert into date_example values(CURDATE(), NOW(), NOW(), time(NOW()), YEAR(NOW()) );

1. CHAR类型和VARCHAR类型

CHAR类型和VARCHAR类型都在创建表时指定了最大长度,其基本形式如下:

    字符串类型(M)

其中,“字符串类型”参数指定了数据类型为CHAR类型还是VARCHAR类型;M参数指定了该字符串的最大长度为M。例如,CHAR(4)就是数据类型为CHAR类型,其最大长度为4。

CHAR类型的长度是固定的,在创建表时就指定了。其长度可以是0~255的任意值。例如,CHAR(100)就是指定CHAR类型的长度为100。CHAR 存储值时,它们会用空格右填充到指定的长度。

VARCHAR类型的长度是可变的,在创建表时指定了最大长度。定义时,其最大值可以取0~65535之间的任意值。指定VARCHAR类型的最大值以后,其长度可以在0到最大长度之间。例如,VARCHAR(100)的最大长度是100,但是不是每条记录都要占用100个字节,而是在这个最大值范围内使用多少就分配多少。VARCHAR类型实际占用的空间为字符串的实际长度加1或2,这样即可有效节约系统的空间。

char(4)储存字节数verchar(4)储存字节数

‘’

‘’

4

‘’

1

‘ab’

‘ab’

4

‘ab’

3

‘abcd’

‘abcd’

4

‘abcd’

5

‘abcdefgh’

-

#插入失败

-

#插入失败

mysql> use test;   #选择数据库test 
mysql> create table char_example(e_char char(5), v_char varchar(5)); #创建数据库表
mysql> insert into char_example values('12345','12345');  #正常插入数据
mysql> insert into char_example values('1 2  ','1 2  ');   #char类型会屏蔽后面隐藏的空格,varchar 不会
mysql> select concat('(',e_char, ')'), concat('(',v_char, ')')  from char_example ; #让char 后面屏蔽的空格原型毕露 

实战建议

  • 1、 char一定会使用指定的空间,varchar是根据数据来定空间
  • 2、 char的数据查询效率比varchar高:varchar是需要通过后面的记录数来计算
  • 3、  如果确定数据一定是占指定长度,那么使用char类型;
  • 4、  如果不确定数据到底有多少,那么使用varchar类型;
  • 5、  如果数据长度超过255个字符而在65535之内,直接使用varchar
  • 6、  如果字符串尾部要保留空格,必须选择varchar
  1. TEXT类型

TEXT类型是一种特殊的字符串类型,包括TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT,其长度和存储空间的对比下表所示:

各种TEXT类型的区别在于允许的长度和存储空间不同。因此,在这几种TEXT类型中,根据需求选取既能满足需要又节省空间的类型即可。

特别注意

  1. 以上各类型无须指定长度!
  2. 允许的长度是指实际存储的字节数,而不是实际的字符个数,比如假设一个中文字符占两个字节,那么TEXT 类型可存储 65535/2 = 32767  个中文字符,而varchar(100)可存储100个中文字符,实际占200个字节,但varchar(65535) 并不能存储65535个中文字符,因为已超出表达范围。
  3. mysql> use test;   #选择数据库test 
    mysql> create table text_example(e_text tinytext, v_char varchar(255)); #创建数据库表,e_text 可存储255个字节,v_char可存储255个字符   
    
    mysql> insert into char_example values(90个中文字符,90个中文字符);  #插入失败,utfmb4 用3个字节表示一个中文汉字,会超出tinytext 保存范围
    
    mysql> insert into char_example values(80个中文字符,100个中文字符);  #插入成功
    

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值