MySQL基础

mysql基础知识

一、MySQL基本简介

  1. 什么是数据库:数据库就是一个存储数据的仓库。

  2. MySQL是一个 RDBMS (Relational Database Management System,关系数据库管理系统) 。

  3. 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、检查约束

原文地址:https://www.cnblogs.com/zhangliuping/p/11657798.html