MySQL基础(一)——学习笔记

1、数据库

1.1 创建数据库

CREATE DATABASE <数据库名称>:使用默认的数据库字符集和排序规则创建数据库;指定字符集创建数据库的语句为:CREATE DATABASE databast_name DEFAULT CHARACTER SET 字符编码;
但是如果该数据库已经存在,再新建数据库,则会出现错误 Err:database exists,可以加上IF NOT EXTSIS字段,不存在时再创建数据库。如:CREATE DATABASE IF NOT EXISTS my_db;

1.2 删除数据库

直接使用DROP DATABASE <数据库名称>语句删除数据库。需要注意,删除的数据库是无法恢复的。

2、表

2.1 表的创建

表是一个二维表,由列和行组成。所谓表的创建,实际是创建表中每个列的名字、列允许的数据类型和列的约束条件。 创建表的CREATE TABLE语句:

CREATE TABLE <表名>
(<列名1> <数据类型>  <列所需约束>  ,
 <列名2> <数据类型>  <列所需约束>  ,
 ... ...
<表约束1>,<表约束2>,...)  

2.2 数据类型

2.2.1 数值类型

MySQL支持所有标准SQL数值数据类型,作为SQL标准的扩展,MySQL也支持整数类型 TINYINT、MEDIUMINT和 BIGINT

MySQL数据类型 含义(有符号)
tinyint(m) 1个字节,范围(-128~127)
smallint(m) 2个字节,范围(-32768~32767)
mediumint(m) 3个字节,范围(-8388608~8388607)
int(m) 4个字节,范围(-2147483648 ~2147483648)
bigint(m) 8个字节,范围(± 9.22*10^18)

数据类型中的长度 m 是指显示长度,并不表示存储长度,只有字段指定 zerofill 时有用。比如:int(3),如果实际值是2,如果列指定了 zerofill 查询结果就是 002,左边用 0 来填充。

create table t(num int(3) zerofill);
insert into t values(2);
select * from t;
+------+
| num  |
+------+
|  002 |
+------+

2.2.2 浮点型

数据类型
float(m,d) 4字节,单精度浮点型,8位精度
double(m,d) 8字节,双精度浮点型 16位精度

m为总长度,d为小数位。比如:float(6,2)——9999.99

2.2.3 字符串型

数据类型
char(n) 固定填充,最多255个字符
varchar(n) 可变长度,最多65535个字符
tinytext 可变长度,最多255个字符
text 可变长度,最多65536个字符
mediumtext 可变长度,最多2^24-1个字符
longtext 可变长度,最多2^32-1个字符

n为存字符串的长度。在Oracle中,char类型存储的是字节,一个中文占3个字节,MySQL中 char 存储的是字符,所以一个中文算一个字符;换句话说,在MySQL中 char(n) 可以存 n 个中文,而Oracle中只能存 n/3 个中文。

char和varchar

  1. char(n):若存入字符数小于n,则用空格补齐于其后,查询之时再将空格去掉,所以 char 数据类型存储的字符串末尾不能有空格;
  2. char:字符串检索速度要比 varchar 类型的快;

varchar和text

  1. varchar 可指定n,text不能指定,内部存储 varchar 是存入实际字符数 +1 个字节(n≤255)或2个字节(n>255),text 是实际字符数 +2 个字节;
  2. text类型不能有默认值;
  3. varchar 可创建索引,text 创建索引要指定前多少个字符。varchar 查询速度快于 text ,在都创建索引的情况下, text 的索引似乎不起作用;

2.2.4 日期类型

数据类型
date 日期
time 时间
datetime 日期时间
timestamp 功能与datetime相同,范围较小
year 年份(可2位数、可4位数表示)

2.2.5 二进制数据(BLOB)

  1. BLOB和TEXT存储方式不同,TEXT 以文本方式存储,因为区分大小写,而BLOB是以二进制方式存储,不区分大小写;
  2. BLOB存储的数据只能整体读出;
  3. TEXT 可以指定字符集,BLOB不用指定字符集;

2.3 更改表名

在创建表的时候,如果手误将表名打错了,是否需要删除掉重新创建表呢?答案:不需要。
可以使用 RENAME TABLE <变更前表名> TO <变更后表名> 语句进行修改表名。 例如,我需要将上面的表Product更改为Commodity,如下:

mysql> RENAME TABLE Product TO Commodity;

2.4 更新表

使用 ALTER TABLE 可以对表进行修改。

添加列
当创建新表之后,需要添加新列,这时可以结合 ADD 关键字添加新列。
添加新列的语句是:
ALTER TABLE <表名> ADD COLUMN (<列名> <数据类型> <约束>)
可以注意到添加新列时,需要设置其数据类型和约束。当然,约束是可以不设置的。

2.5 修改约束

在MySQL中,有以下约束:

约束类型 主键 默认值 唯一值 外键 非空
关键字: PRIMARY KEY DEFAULT UNIQUE FOREIGN KEY NOT NULL
  • 主键:用于约束表中的行。主键不能有重复记录并不能为空
  • 默认值:当插入数据为空时,将使用默认值
  • 唯一值:指定一列的值不能有重复值
  • 外键:确保数据完整性,表现表之间的关系 ;
    CONSTRAINT <外键名字> FOREIGN KEY(要设为外键的列) REFERENCES <参考表名>(该表的列)
  • 非空:插入值时不能为空
-- (1)添加主键约束
alter table table_name add primary key(column_name);
-- (2)添加自动增长
alter table table_name modify column_name type auto_increment;
-- (3)删除主键约束,如果主键具备自动增长能力,需要首先去掉自动增长,然后删除主键
-- A.去除自动增长
alter table table_name modify column_name type;
-- B.删除主键
alter table table_name drop primary key;
-- (4)为列指定非空约束
alter table table_name modify column_name not null;
-- (5)删除列的非空约束
alter table table_name modify column_name type null;
-- (6)指定唯一性约束
alter table table_name add constraint "约束名" unique(column1,..);
-- (7)删除唯一性约束
alter table table_name drop key "约束名";
-- (8)指定外键约束
alter table table_name add constraint "约束名" foreign key(column) references ref_table_name(ref_column_name);
-- (9)删除外键约束
alter table table_name drop foreign key "约束名";

注意:MySQL在创建外键时,会将外键放到一个外键索引中,所以直接删除外键是不成功的,需要先删除外键索引(索引名与外键约束相同)。

-- 删除外键索引
alter table table_name drop index "索引名"

2.6 删除列

结合 DROP 将表格中不需要的列给删除掉。
删除列的语句是:
ALTER TABLE <表名> DROP COLUMN <列名>

  • 注意:表变更之后,数据无法恢复。

2.7 删除表

此前的内容介绍了表的创建和内容的修改,最后来了解一下表的删除。  

表的删除很简单,与数据库的删除相同,只需将 DATABASE 更改为 TABLE 。即: DROP TABLE <表名>

原创文章 10 获赞 5 访问量 1703

猜你喜欢

转载自blog.csdn.net/qq_33736653/article/details/89043024