目录
增(创建数据库):CREATE DATABASE 数据库名 charset utf8;
数据库
理论:存储数据的软件,以表、库的形式将数据永久保存。
常见数据库
关系型数据库:表与表之间的数据存在某种关联关系
- mysql:免费开源,只是中大型企业,已被oracle公司收购。创始人重写了相同功能的mariaDB
- oracle:收费闭源,强大的分布式数据库。目前市面性能最强大的昂贵软件。
- SQLServer:仅支持windows系统的微软软件。
- DB2:IMB公司开发的收费闭源数据库。常与IMB机器绑定销售。
非关系型数据库:通过key-value存储数据,各个数据之间没有关系,非通用性数据库,具有局限性。MongoDB,redis,memcache等
数据库相关概念
- 数据:用来记录事物的状态信息,例如:数字、字符、声音、图像等
- 记录:一条记录用于保存一个事物的典型特征,相当于文件中的一行
- DBMS:数据库管理软件,即一个套接字服务端软件
- 数据库服务器:运行有数据库管理软件的计算机
- 数据库: 数据库是一些关联表的集合。即,存储表的文件夹
- 数据表: 表是数据的矩阵。看起来像一个简单的表格。本质是一个文件,创建表即创建一个文件
- 列: 一列(数据元素) 包含了相同的数据, 例如邮政编码的数据。
- 行:一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据。
- 冗余:存储两倍数据,冗余降低了性能,但提高了数据的安全性。
- 主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。
- 外键:外键用于关联两个表。
- 复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。
- 索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。
- 参照完整性: 参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。
安装MySQL
- 官网下载安装包(不带界面,对应系统,稳定版本)
- 目录解析顺序 bin - mysqld - mysql - data - 文件夹 - 库 - my-default.ini
- 启动mysql服务器
- 添加环境变量:
cmd 内命令:
- 启动服务器:mysqld
- 启动客户端 :mysql -h -P -u -p
- 关闭服务器 :
tasklist | findstr mysqld
taskkill /F /PID 8372注:windows系统下可以在运行 ->services.msc 查看系统服务,找到mysql相应服务,轻松开启服务端。
MySQL修改密码
修改管理员密码:
cmd >>> mysqladmin -uroot -p旧密码 password'123'
注:如果存在警告报错,可忽视
修改用户密码方式:
- mysql文件夹内删除user用户文件
- 重装mysql
- 开启服务器时跳过授权表,直接进入系统修改授权
- 停止原服务
- cmd命令启动服务器
mysqld --skip-grant-tables- 使用客户端登录,执行修改命令:
update mysql.user set password = password('123123') where user= 'root' and host = 'localhost'- 刷新权限 flush privileges
- 重启验证密码
MySQL 编码设置
mysql随着版本不同,默认编码格式不统一,前期存在gbk等编码格式。于是需要utf8来统一格式、
编码设置步骤(windows):
- 查看当前服务器的设置:客户端内 执行 \s
- 复制mysql安装目录下的my-default.ini文件,重命名一份副本为 my,ini,用来编写配置文件
- my.ini内配置文件内容分为 分区和选项:
[mysqld]
character_set_server = utf8
collation_server = utf8_general_ci
[mysql]
default-character-set = utf8
[client]
default-character-set = utf8注:对于5.6版本的修改,服务端只认识下划线设置,而不认识 ‘-’
编码设置步骤(mac):
- mac默认无法修改mysql的安装路径:/usr/local (可使用 command + shift +g 前往)
- 配置文件名为 my.cnf
原理:mysql在启动时,会自动在安装目录下查找ini文件,找到对应命了的标题加载里面的设置项、
配置文件内,mysql和client的区别:
mysql是客户端的一种,客户端还包括python客户端,java客户端等。client和mysql同时存在,则首先生效mysql,其他客户端同理。注:修改了mysqld配置需要重启服务器。
MySQL基本语句
- 库操作
增(创建数据库):CREATE DATABASE 数据库名 charset utf8;
命名规则:
- 可以由字母、数字、下划线、@、#、$
- 取分大小写
- 唯一性
- 不能使用关键词,例:creat select
- 不能单独使用数字
- 最长128位
create database mydb charset utf8;
删:DROP DATABASE 数据库名;
drop database mydb;
改
alter database mydb charset gbk
查
show databases;
show create databases mydb;
select database():
选择数据库:use 数据库名
- 表相关
增(创建表):
#语法: create table 表名( 字段名1 类型[(宽度) 约束条件], 字段名2 类型[(宽度) 约束条件], 字段名3 类型[(宽度) 约束条件] ); ''' #注意: 1. 在同一张表中,字段名是不能相同 2. 宽度和约束条件可选 3. 字段名和类型是必须的 '''
use mydb; create table t1 (id int,name char)
删
drop table 表名
改
- 改表名:
ALTER TABLE 表名 RENAME 新表名;
rename table tname1 to tname2- 修改字段名:
alter table 表名 add | modify | drop | change
add 跟 列名和类型 (添加字段名)
modify 跟 列名 和 类型 (修改字段的属性)
drop 跟列名 (删除字段名)
change 跟 旧列名 新列名 类型 (重置字段名)
修改字符编码:
alter table 表名 default character set gbk查
show tables;
show create table t1; === 查看表详细结构,可添加 \G show creat table t1\G;
desc t1; == 简写:desc 表名
复制表
复制表结构+记录 (key不会被复制: 主键、外键和索引) mysql> create table new_service select * from service; 只复制表结构 mysql> select * from service where 1=2; //使用条件为假,查不到任何记录。则只复制了表结构 Empty set (0.00 sec) mysql> create table new1_service select * from service where 1=2; Query OK, 0 rows affected (0.00 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> create table t4 like employees;
- 记录相关
增
- 插入完整数据(顺序插入):
-1)INSERT INTO 表名(字段1,字段2,字段3…字段n) VALUES(值1,值2,值3…值n);
-2)INSERT INTO 表名 VALUES (值1,值2,值3…值n);- 指定字段插入数据
INSERT INTO 表名(字段1,字段2,字段3…) VALUES (值1,值2,值3…);
- 插入多条数据
INSERT INTO 表名 VALUES (值1,值2,值3…值n), (值1,值2,值3…值n), (值1,值2,值3…值n);
- 插入查询数据
INSERT INTO 表名(字段1,字段2,字段3…字段n) SELECT (字段1,字段2,字段3…字段n) FROM 表2 WHERE …
删
delete from 表名 where 条件; (没有条件则删除所有; )
truncate table t1; (重建表,清空所有数据;)
改(更新数据)
- 修改单个字段:update 表名 set 字段 = 值 where 条件 ;
- 修改多个字段:update 表名 set 字段1=值1,字段2=值2,where条件;
注:可同时修改多个字段 ,⽤逗号隔开。例:列名=值,列名=值...(没有条件则修改全部)
查(单表查询和多表查询)