MySQL基础
mysql基础知识
一、MySQL基本简介
-
什么是数据库:数据库就是一个存储数据的仓库。
-
MySQL是一个 RDBMS (Relational Database Management System,关系数据库管理系统) 。
-
MySQL特点:
- 开源,免费
- 采用C和C++编写,保证了源代码的可移植性。
- 支持多种操作系统。
- 为多种语言提供了API。
- 支持多线程
- 优化的SQL查询算法
- 提供多种语言支持
- 支持大型数据库
- 支持多种存储引擎
二、数据库操作
- 启动MySQL:
net start mysql
- 关闭MySQL:
net stop mysql
注意:启动或关闭MySQL数据库时,需要管理员权限。
- 登录MySQL:
mysql -u root -p
- 查看所有数据库:
show databases ;
- 使用 LIKE 从句精准查询:
格式:show databases LIKE '数据库名';
- 使用 LIKE 从句,查看名字中包含 test 的数据库:
格式:SHOW DATABASES LIKE '%test%';
- 使用 LIKE 从句,查看名字以 db 开头的数据库:
格式:SHOW DATABASES LIKE 'db%';
- 使用 LIKE 从句,查看名字以 db 结尾的数据库:
格式:SHOW DATABASES LIKE '%db';
- 创建新数据库:
格式:create database 数据库名;
例如:create database db_info;
注意:MySQL数据库不区分大小写,在创建数据库时不能与其他数据库同名,名称可以任意字母、数字、下划线(_)、和"$"组成,不能使用单独的数字,不能使用MySQL关键字作为数据库名和表名。
- 查看数据库创建语句
格式:show create database 数据库名;
例如:show create database db_info;
- 选择数据库:
格式:use 数据库名;
例如:use db_info;
- 删除数据库:
格式:drop database 数据库名;
例如:drop database db_info;
注意:不要随便删除MySQL自带的数据库,否则数据库无法使用。
- MySQL的注释
单行注释:# 和 --
多行注释:/**/
三、数据库设计
1、软件项目的开发周期:
- 需求分析
- 概要设计
- 逻辑设计/详细设计
- 代码编写
- 软件测试
- 安装部署
2、数据库设计阶段
- 需求分析:明确客户对系统的需求(数据需求和业务需求)。
- 概要设计:抽象用户需求,绘制数据库的E-R图。
- 逻辑结构设计:将E-R图转换成多个表,进行逻辑设计。
- 物理阶段设计:确定E-R图后,选择具体的数据库进行物理实现。
- 数据库实施阶段:建立数据库,编制调试应用程序,并进行运行。
- 数据库运行和维护阶段:对数据库进行调整与修改。
四、MySQL数据类型和存储引擎
1、 数据类型:MySQL的数据类型有数值类型、日期/时间类型、字符串类型、二进制类型。
2、 MySQL中除了常见的字符之外,我们还会遇到一些特殊的字符,如换行符、回车符等。我们需 要用某些特殊的字符来表示特殊的含义,这就是转义字符。
转义字符一般以反斜杠符号****开头,常见的转义字符如下:
转义字符 | 转义后字符 |
---|---|
\" | 双引号(") |
\' | 单引号(') |
\\ | 反斜杠(\) |
\n | 换行符 |
\r | 回车符 |
\t | 制表符 |
\0 | ASII 0 (NUL) |
\b | 退格符 |
3、MySQL的存储引擎有InnoDB 、MyISAM、Memory、Merge、Archive、CSV、BLACKHOLE 等。
- 查看系统引擎类型:
SHOW ENGINES;
- 查看系统默认引擎:
SHOW VARIABLES LIKE 'default_storage_engine%';
- 修改零时默认引擎:
SET default_storage_engine=存储引擎名;
- 修改表的存储引擎
ALTER TABLE <表名> ENGINE=存储引擎名;
五、MySQL表的基本操作
数据表是数据库的重要组成部分,每一个数据库都是由若干个数据表组成。
1、创建表的语法:
CREATE TABLE 表名(表定义选项)表选项 分区选项;
例: create table db_emp(
id int(11),
name varchar(25),
deptId int(11),
salary float);
2、修改表的语法:
ALTER TABLE 表名 修改选项;
修改表是修改数据库中已经存在的数据表的结构,前提是数据库中已经有这个表。
3、修改表名:
ALTER TABLE 旧表名 RENAME TO 新表名;
例: alter table db_emp rename to db_student;
4、修改字符集:
ALTER TABLE 表名 CHARACTER SET 字符集名 [DEFAULT] COLLATE 校对规则名;
例: ALTER TABLE db_student
CHARACTER SET gb2312
DEFAULT COLLATE gb2312_chinese_ci;
5、修改字段名称:
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型;
例: alter table db_student change salary Salary float;
6、修改字段类型:
ALTER TABLE 表名 MODIFY 字段名 数据类型;
例: alter table db_student modify name varchar(30);
7、删除字段:
ALTER TABLE 表名 DROP 字段名;
例: alter table db_student drop deptId;
8、添加字段:
ALTER TABLE 表名 ADD 新字段名 数据类型;
例: alter table db_student add empId int(10);
9、删除数据表:
DROP TABLE 表名;
例: drop table db_sutdent;
10、删除被其它表关联的主键:
数据表之间经常有外键关联的情况,直接删除父表,会破坏表的完整性,也删除不了。
删除父表有两种方法:
- 先删除与它关联的子表,再删除父表,这样就删除了2个表。
- 将关联的外键约束取消,再删除父表,这样子表就保留下来了。
在数据库中创建2个表:
CREATE TABLE db_student01(
id INT(11) PRIMARY KEY,
name VARCHAR(22),
location VARCHAR (50));
------------------------------------------------------
CREATE TABLE db_student02(
id INT(11) PRIMARY KEY,
name VARCHAR(25),
deptId INT(11),
salary FLOAT,
CONSTRAINT fk_student01_student02
FOREIGN KEY (deptId)
REFERENCES db_student01(id));
查看表db_student02的外键约束:
SHOW CREATE TABLE db_student02;
可以看到db_student02为子表,具有外键约束,db_student01为父表,主键id被子表db_student02所关联。执行drop table db_student01;发现报错,不能直接删除。
解除子表db_student02的外键约束:
ALTER TABLE db_student02 DROP FOREIGN KEY fk_student01_student02;
这样就可以解除关联了,然后就可以删除 db_student01表。
11、查看表结构:
DESCRIBE 表名;
DESC 表名; (简写)
例: DESC db_student;
12、查看创建表的语句:
SHOW CREATE TABLE 表名;
例: show create table db_student;
13、查看一个数据库所有的表:
show tables;
六、MySQL约束、函数与运算符
1、MySQL约束是指对表中数据的一种约束,能够确保数据库中数据的正确性和有效性。在MySQL中,主要支持6种约束:
- 主键约束:主键是一个特殊字段,能唯一标识该表中的每条信息。
- 外键约束:外键约束一般和主键约束一起使用,确保数据的一致性。
- 唯一约束:唯一约束可以有多个,只允许有一个空值。
- 检查约束:检查约束是用来检查数据表中,字段是否有效的一个手段。
- 非空约束:非空约束用来约束表中的字段不能为空。
- 默认值约束:用来约束当数据表中某个字段不输入值时,自动为其添加一个已设置好的值。
2、主键(PRIMARY KEY)是MySQL中使用最频繁的约束,主键分为单字段和多字段联合主键。
使用主键应该注意:
-
每个表只能定义一个主键
-
主键值必须唯一标识表中的每一行,不能为NULL,表中不能存在相同主键值的两行数据。
-
一个字段名只能在联合主键字段表中出现一次。
-
联合主键不能包含不必要的多余字段。
在 CREATE TABLE 语句中,通过 PRIMARY KEY 关键字来指定主键。
字段名 数据类型 PRIMARY KEY
或者在定义完所有字段之后指定主键:
PRIMARY KEY (字段名)
- 联合主键就是这个主键是由一张表中多个字段组成的。
PRIMARY KEY(字段1,字段2,···)
主键约束不仅可以在创表时创建也可以在修改表时添加,设置主键约束的字段中不能有空值。
添加主键约束语法:
ALTER TABLE 数据表名 ADD PRIMARY KEY(字段名);
删除主键约束:
ALTER TABLE 数据表名 DROP PRIMARY KEY;
3、在MySQL中,当主键定义为自增长后,这个主键的值就不再需要用户输入数据了,而由数据库系统根据定义自动赋值。通过给字段添加AUTO_INCREMENT属性来实现主键自增长。
字段名 数据类型 AUTO_INCREMENT
默认情况下,AUTO_INCREMENT的初始值是1,每新增一条记录,字段值自动加1。AUTO_INCREMENT 约束的字段只能是整数类型。如果第一条记录设置了该字段的初始值,那么新增加的记录就从这个初始值开始自增。例如,如果表中插入的第一条记录的 id 值设置为 3,那么再插入记录时,id 值就会从 3开始往上增加。
4、MySQL外键约束是表的一个特殊字符,经常和主键约束一起使用,两个具有关联关系的表而言,相关字段中主键所在的表就是主表,外键所在的表就是从表。一个表可以有一个或多个外键,外键可以为空值,若不为空值,则每一个外键的值必须等于主表中主键的某个值。
添加外键约束语法:
FOREIGN KEY(字段名) REFERENCES 主表名(主键)
先创建表tb_dept:
create table tb_dept(
id int(11) primary key,
name varchar(22) not null,
location varchar(50));
然后创建表tb_emp,并在表tb_emp上创建外键约束,然它的键deptId作为外键关联到表tb_dept的主键id:
CREATE TABLE tb_emp(
id INT(11) PRIMARY KEY,
name VARCHAR(25),
deptId INT(11),
salary FLOAT,
CONSTRAINT fk_emp_dept
FOREIGN KEY(deptId) REFERENCES tb_dept(id));
通过DESC tb_emp;就可以查看到表tb_emp添加了外键约束,外键名为deptId,它依赖于表tb_dept的主键id。
修改外键约束:外键约束也可以在修改表时添加,语法:
alter table 数据表名 add constraint 外键名 foreign key(字段名) references 主表名(字段名);
删除外键约束:当一个表不需要外键约束时,就需要从表中删除,这样就会解除主表和从表间的关联关系。
ALTER TABLE 表名 DROP FOREIGN KEY 外键约束名;
5、MySQL唯一约束是指所有记录中字段的值不能重复出现。唯一约束与主键约束相似的是它们都可以确保列的唯一性。唯一约束在一个表中可有多个,并且设置唯一约束的列允许有空值,但是只能有一个空值。而主键约束在一个表中只能有一个,且不允许有空值。比如,在用户信息表中,为了避免表中用户名重名,可以把用户名设置为唯一约束。
使用 UNIQUE 关键字指定唯一约束:
字段名 数据类型 UNIQUE;
例:CREATE TABLE tb_dept01(
id INT(11) PRIMARY KEY,
name VARCHAR(22) UNIQUE,
location VARCHAR(50));
在修改表时添加唯一约束:
ALTER TABLE 数据表名 ADD CONSTRAINT 唯一约束名 UNIQUE(字段名);
例: alter table tb_dept02 add constraint unique_name unique(name);
删除唯一约束:
ALTER TABLE 表名 DROP INDEX 唯一约束名;
例:alter table tb_dept02 drop index unique_name;
6、检查约束