MySQL基础操作
使用方法:
方式一: 通过图型界面工具,如 Navicat 等( 高级课使用 )
方式二: 通过在命令行敲命令来操作 ( 基础阶段使用 )
SQL ( Structure query language ) 结构化查询语言
SQL语言分为4个部分:DDL(定义)、DML(操作)、DQL(查询)、DCL(控制)
SQL语句中的快捷键
\G 格式化输出(文本式,竖立显示)
\s 查看服务器端信息
\c 结束命令输入操作
\q 退出当前sql命令行模式
\h 查看帮助
操作数据库的步骤
连接, 打开库, 操作, 关闭退出
1.通过命令行连接MySQL
数据库语法的特点
1) SQL 语句可以换行, 要以分号结尾
2) 命令不区分大小写. 关键字和函数建议用大写
3) 如果提示符为 '> 那么需要输入一个'回车
4) 命令打错了换行后不能修改, 可以用 \c 取消
2. 数据库操作
查看数据库 show databases;
创建数据库 create database 库名 default charset=utf8;
删除数据库 drop database 库名;
打开数据库 use 库名;
3. 数据表操作
数据库管理系统中, 可以有很多''库'', 每个数据库中可以包括多张数据''表''
import6.png
查看表: show tables;
创建表: create table 表名(字段名1 类型,字段名2 类型)engine=innodb default charset=utf8;
创建表: 如果表不存在,则创建, 如果存在就不执行这条命令
create table if not exists 表名(
字段1 类型,
字段2 类型
);
删除表: drop table 表名;
表结构: desc 表名;
记录操作 增删改查
插入 insert into 表名(字段1,字段2,字段3) values(值1,值2,值3);
insert into 表名(字段1,字段2,字段3) values(a值1,a值2,a值3),(b值1,b值2,b值3);
查询 select * from 表名;
select 字段1,字段2,字段3 from 表名;
select * from 表名 where 字段=某个值;
修改 update 表名 set 字段=某个值 where 条件;
update 表名 set 字段1=值1,字段2=值2 where 条件;
update 表名 set 字段=字段+值 where 条件;
删除 delete from 表名 where 字段=某个值;
4. 退出MySQL
exit; 或者 quit;
数据导出
-- 将users库导出
-u root -p users >users.sql
-- 将users库中的stu表导出
-u root -p users stu >users_stu.sql
数据导入
-- 将users库导入
-u root -p users<users.sql
-- 将users库中stu表导入
-u root -p users<users_stu.sql
授权
格式:grant 允许操作 on 库名.表名 to 账号@来源 identified by '密码';
-- 创建zhangsan账号,密码123,授权users库下所有表的增/删/改/查数据,来源地不限
grant select,insert,update,delete on users.* to zhangsan@'%' identified by '123';
grant all on *.* to zhangsan@'%' identified by '123';
-- 添加用户, 并授予在users的数据库中可以对user表进行 查询和添加数据操作
grant select,insert on users.user TO 'xxoo'@'%' identified by 'abcd'
-- 删除用户
drop user 'xxoo'@'%'
MySQL忘记root密码
windows
1.结束正在运行的数据库服务器进程 mysqld.exe
2.在DOS命令行执行 mysqld --skip-grant-tables
3.再打开一个DOS窗口, 可直接输入 mysql 以管理员的身份强行进入.
4. use mysql
5. update user set authentication_string=password('新密码') where user='root';
6. 刷新权限 flush privileges;
Ubuntu 16.04 LTS
-- ubuntu 下, mysql忘记密码后重置mysql密码
-- 修改配置文件
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
在[mysqld]的段中加上一句:skip-grant-tables 保存并且退出vim。
-- 重启mysqld
sudo /etc/init.d/mysqld restart
-- 登录并修改MySQL的root密码
mysql
mysql> USE mysql ;
mysql> update mysql.user set authentication_string=password('abc123') where user='root' and Host = 'localhost';
mysql> flush privileges ;
mysql> quit
-- 重新修改配置文件 把刚才添加的一句注释或者删除
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
-- 重新启动服务
sudo /etc/init.d/mysqld restart
-- 使用新密码重新登录mysql
mysql -u root -pabc123
mysql>
MySQL 数据类型
数值类型
**tinyint **1字节 可以表示 0-255 (无符号) 可以表示 -128 ~ 127 (有符号)
int 4字节 无符号(0,4 294 967 295) 有符号 (-2 147 483 648,2 147 483 647)
**decimal **以字符串形式存储的浮点数 decimal(5, 2) 表示数值总共5位, 小数占2位
日期和时间类型
datetime 8字节 1000-01-01 00:00:00 -- 9999-12-31 23:59:59
字符串类型
char 定长字符串 char(7) 不管实际插入多少字符, 它都会占用7个字符位置(中文一个汉字也是一个位置)
varchar 变长字符串 varchar(7) 如果实际插入4个字符, 那么它只占4个字符位置
text 这种类型用来存放超大文本
enum 枚举类型( 多选一 ) sex enum('w','m','x') 代表sex这个字段, 可以取 'w', 'm', 'x' 中的一个值
表的字段约束
unsigned 无符号
int(4) 显示宽度
zerofill 零填充, 位数不够的时候用前导零填充
not null 不能为空 在操作数据库时如果输入该字段的数据为NULL ,就会报错
default 设置默认值
primary key 主键 不能为空 且唯一
auto_increment 定义列为自增的属性,一般用于主键,数值会自动加1。
unique 唯一
MySQL的运算符:
算术运算符:+ - * / %
比较运算符:= > < >= <= <> !=
数据库特有的比较:in,not in, is null,is not null,like, between and
逻辑运算符:and or not
like: 支持特殊符号%和_ ; 其中 %表示任意数量的任意字符,_表示任意一位字符。
数值类型
MySQL支持所有标准SQL数值数据类型。
这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION)。
关键字INT是INTEGER的同义词,关键字DEC是DECIMAL的同义词。
BIT数据类型保存位字段值,并且支持MyISAM、MEMORY、InnoDB和BDB表。
作为SQL标准的扩展,MySQL也支持整数类型TINYINT、MEDIUMINT和BIGINT。下面的表显示了需要的每个整数类型的存储和范围。
类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
---|---|---|---|---|
TINYINT | 1 字节 | (-128,127) | (0,255) | 小整数值 |
SMALLINT | 2 字节 | (-32 768,32 767) | (0,65 535) | 大整数值 |
MEDIUMINT | 3 字节 | (-8 388 608,8 388 607) | (0,16 777 215) | 大整数值 |
INT或INTEGER | 4 字节 | (-2 147 483 648,2 147 483 647) | (0,4 294 967 295) | 大整数值 |
BIGINT | 8 字节 | (-9 233 372 036 854 775 808,9 223 372 036 854 775 807) | (0,18 446 744 073 709 551 615) | 极大整数值 |
FLOAT | 4 字节 | (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) | 0,(1.175 494 351 E-38,3.402 823 466 E+38) | 单精度 浮点数值 |
DOUBLE | 8 字节 | (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 双精度 浮点数值 |
DECIMAL | 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 | 依赖于M和D的值 | 依赖于M和D的值 | 小数值 |
日期和时间类型
表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。
每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。
TIMESTAMP类型有专有的自动更新特性,将在后面描述。
类型 | 大小(字节) | 范围 | 格式 | 用途 |
---|---|---|---|---|
DATE | 3 | 1000-01-01/9999-12-31 | YYYY-MM-DD | 日期值 |
TIME | 3 | '-838:59:59'/'838:59:59' | HH:MM:SS | 时间值或持续时间 |
YEAR | 1 | 1901/2155 | YYYY | 年份值 |
DATETIME | 8 | 1000-01-01 00:00:00/9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值 |
TIMESTAMP | 4 | 1970-01-01 00:00:00/2037 年某时 | YYYYMMDD HHMMSS | 混合日期和时间值,时间戳 |
字符串类型
字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。该节描述了这些类型如何工作以及如何在查询中使用这些类型。
类型 | 大小 | 用途 |
---|---|---|
CHAR | 0-255字节 | 定长字符串 |
VARCHAR | 0-65535 字节 | 变长字符串 |
TINYBLOB | 0-255字节 | 不超过 255 个字符的二进制字符串 |
TINYTEXT | 0-255字节 | 短文本字符串 |
BLOB | 0-65 535字节 | 二进制形式的长文本数据 |
TEXT | 0-65 535字节 | 长文本数据 |
MEDIUMBLOB | 0-16 777 215字节 | 二进制形式的中等长度文本数据 |
MEDIUMTEXT | 0-16 777 215字节 | 中等长度文本数据 |
LONGBLOB | 0-4 294 967 295字节 | 二进制形式的极大文本数据 |
LONGTEXT | 0-4 294 967 295字节 | 极大文本数据 |
CHAR和VARCHAR类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。
BINARY和VARBINARY类类似于CHAR和VARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值值。
BLOB是一个二进制大对象,可以容纳可变数量的数据。有4种BLOB类型:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。它们只是可容纳值的最大长度不同。
有4种TEXT类型:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。这些对应4种BLOB类型,有相同的最大长度和存储需求。
索引
添加索引可以提升查询速度 ,但是会降低插入数据和更新数据的速度
主键索引 primary key 一个表中默认最少要有一个主键索引
唯一不能为空
唯一索引 unique 唯一
普通索引 index 可重复
全文索引 不支持中文