- 参考书籍《MySql从入门到精通》
- 学习视频【韩顺平讲MySQL】零基础一周学会MySQL -sql mysql教程 mysql视频 mysql入门_哔哩哔哩_bilibili
- 萌新入门,如有错误恳请各位大佬指点,不甚感激
目录
数据库的三层结构
- 所谓安装Mysql数据库,就是在主机安装一个数据库管理系统(DBMS),这个管理程序可以管理多个数据库.DBMS(database manage system)
- 一个数据库可以创建多个表,以保存数据(信息)
- 数据库管理系统(DBMS),数据库和表的关系
1.数据库
数据库-表的本质仍然是文件
SQL语句分类
- DDL:数据定义语句
- DML:数据操作语句[增加,修改,删除]
- DQL: 数据查询语句[select]
- DCL: 数据控制语句[管理数据库]
创建数据库
CREATE {DATABASE|SCHEMA} [IF NOT EXISTS] 数据库名
[
[DEFAULT] CHARACTER SET[=] 字符集 |
[DEFAULT] COLLATE [=] 校队规则名称
];
- “{}”表示必选项;“[]”表示可选项;“|”表示分隔符两侧的内容为"或"的关系。
- {DATABASE|SCHEMA} 中要么使用DATABASE,要么使用SCHEMA,不能全不使用
- CHARACTER SET:指定数据库采用的字符集,如果不指定,默认为utf8
- COLLATE:指定数据库字符集的校队规则(常用的 utf8_bin[区分大小写],utf8_general_ci 注意默认是utf8_general_ci)[举例说明 database.sql 文件]
例:
1.创建一个使用utf8字符集的hsp_db01数据库
CREATE DATABASE hsp_db01 CHARACTER SET utf8
2.创建一个使用utf8字符集,并带校队规则的hsp_db02数据库
CREATE DATABASE hsp_db02 CHARACTER SET utf8 COLLATE utf8_bin
删除数据库
DROP DATABASE 数据库名
查看数据库
SHOW DATABASES
显示数据库创建语句
SHOW CREATE DATABASE 数据库名
- 在创建数据库,表时,为了规避关键字,可以使用反引号解决(也可以用关键字做数据库名,用反引号即可)
删除数据库
DROP DATABASE [IF EXISTS] 数据库名
备份恢复数据库
备份数据库
在DOS执行命令行
:mysqldump -u 用户名 -p -B 数据库1 数据库2 数据库n > 文件名.sql
恢复数据库
Source 文件名.sql(在DOS执行命令)
备份数据库的表
mysqldump -u 用户名 -p 密码 数据库 表1 表2 表n > d:\\文件名.sql
笔记:
- 表设置时没有设置字符集和校队规则,其字符集和校对规则会是数据库设置的相对应的字符集和校队规则
2.表
创建表
CREATE TABLE 数据表名
(
field1 datatype,
field2 datatype,
field3 datatype
)character set字符集 collate 校对规则 engine 引擎
filed:指定列名 datatype :指定列类型(字段类型)
character set:如不指定则为所在数据库字符集
collate:如不指定则为所在数据库校对规则
engine:引擎
例:
CREATE TABLE `use` (
id INT,
`name` VARCHAR(255),
`password` VARCHAR(255),
`birthday` DATE)
CHARACTER SET utf8 COLLATE utf8_bin ENGINE INNODB;
注意:创建表时,要根据需保存的数据创建相应的列,并根据数据的类型定义相应的列类型。
列类型
列类型之整型
类型 | 字节 | 最小值 | 最大值 |
(带符号的/无符号的) | (带符号的/无符号的) | ||
TINYINT | 1 | -128 | 127 |
0 | 255 | ||
SMALLINT | 2 | -32768 | 32767 |
0 | 65535 | ||
MEDIUMINT | 3 | -8388608 | 8388607 |
0 | 16777215 | ||
INT | 4 | -2147483648 | 2147483647 |
0 | 4294967295 | ||
BIGINT | 8 | -9223372036854775808 | 9223372036854775807 |
0 | 18446744073709551615 |
使用规范:在满足需求的情况下,尽量选择占用空间小的类型
列类型之bit
- bit(m) m 在1-64
- 添加数据的范围按照你给定的位数决定,比如m=8 表示一个字节 0~255
- 显示按照bit
- 查询时,仍然可以按照数来查询
CREATE TABLE t5 (num BIT(8));
INSERT INTO t5 VALUES(255);
列类型之小数型
1.FLOAT/DOUBLE [UNSIGNED]
float 单精度,double 双精度
2.DECIMAL[M,D] [UNSIGNED]
- 可以支持更加精确的小数位。M是小数位数(精度)的总数,D是小数点(标度)后面的位数
- 如果D是0,则值没有小数点或分数部分。M最大65。D最大是30。如果D被省略,默认是0。如果M被省略,默认是10。
- 建议:如果希望小数点精度高,推荐使用decimal
- 存放很大的数,使用decimal
代码如下
#创建表
CREATE TABLE t6(
num1 FLOAT,
num2 DOUBLE,
num3 DECIMAL(30,20));
#添加数据
INSERT INTO t6 VALUES(11.123456789123456789,11.1234567891011121314151617,11.1234567891011121314151617181920);
SELECT * FROM t6;
列类型之字符串
基本使用:
CHAR(size):固定长度字符串 最大255字符
VARCHAR(size) 0~65535:可变长度字符串
最大65532字节 【utf8编码最大21844字符 1-3个字节用于记录大小】
字符串使用细节
char(4)这个4表示字符数(最大255),不是字节数,不管中文还是字母都放4个。
char(4)是定长,即使插入'aa',也会占用分配的4个字符
verchar(4)这个4表示字符数,同上
verchar(4)是变长,如果插入'aa',实际占用空间大小并不是4个字符,而是按照实际占用空间来分配(verchar本身还需要占用1-3个字节来记录存放内容长度)
如果数据是定长用char,(手机号,身份证号)变长用verchar(留言),
查询速度,char>verchar
如果verchar不够用,可以考虑使用mediumtext,或者longtext
如果想简单点,可以直接使用text(无默认值)
日期类型
CREATE TABLE t8(
birthday DATE,
job_time DATETIME ,-- 可以记录分秒
login_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON
UPDATE CURRENT_TIMESTAMP);-- login_time自动更新
SELECT * FROM t8;
INSERT INTO t8(birthday ,job_time)
VALUES('2022-7-17','2022-7-17 9:58:10');
如果我们更新 t8 表的某条记录,login_time就会以当前的时间自动更新
创建表的练习
CREATE TABLE t9(
id INT,
`name` VARCHAR(32),
sex CHAR(1),
birthday DATE,
entrydate DATETIME,
job VARCHAR(32),
salary DOUBLE,
re TEXT) CHARSET utf8 COLLATE utf8_bin ENGINE INNODB;
INSERT INTO t9 VALUES (100,'小妖怪','男','2022-7-17','2022-7-17 11:11:11','巡山的',3000,'大王叫我来巡山');
SELECT * FROM t9;
修改表
使用 ALTER TABLE 语句追加,修改,或删除列的语法。
添加列:ALTER TABLE 表名
ADD ( column datatype [DEFAULT expr] [,column datatype ]...);
修改列: ALTER TABLE 表名
MODIFY ( column datatype [DEFAULT expr] [,column datatype ]...);
删除列:ALTER TABLE 表名
DORP (column);
查看表的结构: desc 表名;-- 可以查看表的列
修改表名:Rename table 表名 to 新表名
修改表字符集: alter table 表名 character set 字符集;
修改表演示:
-- 在表t9上增加一个image列,varchar类型(要求在re后面)
ALTER TABLE T9
ADD image VARCHAR(32) NOT NULL DEFAULT ' '
AFTER re
-- 修改job列,使其长度变为60.
ALTER TABLE t9
MODIFY job VARCHAR(60) NOT NULL DEFAULT ' '
将表名修改为t99
RENAME TABLE t9 to t99
修改表的字符集为utf8
ALTER TABLE t99 CHARACTER SET utf8;
将列名name修改为use_name
ALTER TABLE t99
CHANGE `name` `user_name` VARCHAR(64) NOT NULL DEFAULT ' '
编译器中注释快捷键:shift+ctrl+c 取消注释:shift+ctrl+r
以上为相关的视频笔记,如有侵权请联系我删除。