PHP入门基础之MySQL基础
1、什么是数据库
相关术语:数据库系统(Database System):DBS{
数据库(Database)
数据管理系统(Database Management System DBMS)
应用开发工具
管理员及用户
}
SQY语言:结构化查询语言{
DDL数据定义语言
DML数据操作语言
DQL数据查询语言
DCL数据控制语言
}
2、MySQL的数据类型:
数值型:{
整数型--
浮点型--
}
字符串类型--
日期时间类型--
3、MySQL相关操作
MySQL命令行:
mysql配置文件:my.ini
在mysql安装目录-->MySQL5.7.26\bin 打开cmd,即可进行数据库操作
登陆mysql:mysql -uroot p | mysql -uroot -proot
退出:exit | quit | \q
命令行结束符默认使用; | \g 来结束
登陆同时打开指定数据库:mysql -uroot -p -D db_name
查看相关手册:help | \h | ?加上相关关键字
取消当前命令的执行:\c
sql 规范: 常用MySQL的关键字我们需要大写,库名、表名、字段名称使用小写
sql语句支持折行操作,但不能拆开完整单词
数据库名称、表名称、字段名称不要使用MySQL保留字,如果必须使用,需要反引号``括起来
常用sql语句:
SELECT USER():得到登陆的用户
SELECT VERSION():得到mysql的版本信息
SELECT NOW():得到当前的日期时间
SELECT DATABASE():得到当前打开的数据库
4、数据库相关操作
创建数据库 CREATE DATABASE|SCHEMA db_name;(名字要有意义但不能有特殊字符或者mysql关键字) 查看数据库 SHOW DATABASES |SCHEMA 检测数据库名称是否存在,不存在则创建 : CREATE DATABASE [IF NOT EXISTS] db_name; 查看上一步警告信息:SHOW WARNINGS; 在创建数据库的同时指定编码方式:CREATE DATABASE [IF NOT EXISTS] db_name [DEFAULT] CHARACTER SET[=] 'charset'; 查看指定数据库相关信息: SHOW CREATE DATABASE db_name; 修改指定数据库编码方式:ALTER DATABASE db_name [DEFAULT] CHARACTER SET [=] 'charset'; 打开指定数据库:USE db_name; 删除数据库:DROP DATABASE [IF EXISTS] db_name; 得到当前打开的数据库:SELECT DATABASE()|SCHEMA(); mysql注释:# | -- 注释内容
5、数据表相关操作
数据表由行(row)和列(column)组成
向表中插入一条记录 INSERT [INTO] table_name(id,username,...) VALUES(1,'KING',...);
查询表中所有记录 SELECT * FROM table_name;
查看当前数据库下已有数据表{
SHOW TABLES;
SHOW [FULL] TABLES[{FROM | IN} db_name] [LIKE 'pattern' | WHERE expr];
}
查看指定数据表的详细信息:SHOW CREATE TABLE table_name;
查看表结构 :DESC table_name;
DESCRIBE table_name;
SHOW COLUMNS FROM table_name;
删除指定的数据表:DROP TABLE [IF EXISTS] table_name;
创建表:CREATE TABLE [IF NOT EXISTS] `table_name`(
字段名称 字段类型 [完整性约束条件] [COMMENT '注释'],
字段名称 字段类型 [完整性约束条件] [COMMENT '注释'],
...
)ENGINE=存储引擎 CHARSET=编码方式;
完整性约束条件:{
unsigned:无符号,没有负数,从0开始
zerofill:零填充,当数据的显示长度不够的时候可以使用前补0的效果填充至指定长度,字段会自动添加UNSIGNED
NOT NULL:非空约束,也就是插入值的时候该字段必须给值,值不能为空
DEFAULT:默认值,如果插入记录的时候没有给字段赋值,则使用默认值
PRIMARY KEY:主键,标识记录的唯一性,值不能重复,一个表只能有一个主键,自动禁止为空。
UNIQUE KEY:唯一性,一个表里可以有多个字段,同样的值不能重复,但是null值除外
AUTO_INCREMENT:自动增长,只能用于数值列,而且配合索引所有(默认起始值从1开始,每次增长1)
FOREING KEY:外键约束
}
测试完整性约束条件:
整型:如果超出数据类型的范围,会产生截断现象,与字段要求的长度无关(-255-255)
无符号:如果超出数据类型的范围,会产生截断现象,与字段要求的长度无关(0-255)
零填充:位数不够时前补0填充
浮点型: DECIMAL:有小数会进行四舍五入,但是保留的是整数。对精度比较高的选择float和double
字符串类型:CHAR效率高于VARCHAR,CHAR相当于拿空间换时间,VARCHAR相当于拿时间换空间
CHAR:默认存储数据的时候,后面会用空格填充到指定长度;而在检索的时候会去掉后面空格(定长使用该类型);
VARCHAR:在保存的时候不进行填充,尾部的空格会留下(不定长的可以使用这个)。
TEXT:不能有默认值,区分大小写
ENUM枚举类型:自动过滤掉空格,枚举开始索引为1,不存在的则报错
SET集合类型: 自动过滤掉空格,开始索引为1,
TIME类型:HH:MM:SS [D HH:MM:SS] D表示天数 0~34
HHMMSS,也可以使用函数NOW(),CURRENT_TIME
DATE类型:YYYY-MM-DD ,YYYYMMDD,YY-MM-DD,YYMMDD
70~99转换成1970~1999 00~69转换成2000~2069
DATATIME类型:DATA+TIME的组合体
TIMESTAMP类型:1、插入CURRENT_TIMESTAMP 2、插入NULL 3、什么也不写 都是得到当前系统日期和时间
(自动带有时区,不同的地方是不同的时间)
YEAR类型:1901~2155 1、插入数字0 结果是0000,2、插入字符串'0' 结果是2000
70~99转换成1970~1999 00~69转换成2000~2069
--复合主键 CREATE TABLE table_name( id INT UNSIGNED, courseId INT UNSIGNED, username VARCHAR(20), email VARCHAR(50), PRIMARY KEY(id,courseId) ) --测试自动增长 AUTO_INCREMENT CREATE TABLE table_name( id INT UNSIGNED KEY AUTO_INCREMENT, username VARCHAR(20) ) --创建慕课网 imooc CREATE DATABASE IF NOT EXISTS imooc DEFAULT CHARACTER SET 'UTF8'; --打开imooc USE imooc; --用户表 user CREATE TABLE IF NOT EXISTS imooc_user( id INT, username VARCHAR(20), password CHAR(32), email VARCHAR(50), age TINYINT(4), card CHAR(18), tel CHAR(11), salary FLOAT(8,2), married TINYINT(1), addr VARCHAR(100), sex ENUM('男','女','保密') )ENGINE=INNODB CHARSET=UTF8; --新增数据 INSERT imooc_user(id,username,password,email,age,card,tel,salary,married,addr,sex) VALUES(1,'BIN','123456','12345678@QQ.COM','22','513019291832783287','17685405486','45500',0,'四川省',1); --完整的用户表 imooc_user CREATE TABLE IF NOT EXISTS `imooc_user`( `id` INT UNSIGNED AUTO_INCREMENT KEY COMMENT 'id', `username` VARCHAR(20) NOT NULL UNIQUE COMMENT '用户名', `password` CHAR(32) NOT NULL COMMENT '密码', `email` VARCHAR(50) NOT NULL UNIQUE COMMENT '邮箱', `age` TINYINT UNSIGNED NOT NULL DEFAULT 18 COMMENT '年龄', `sex` ENUM('男','女','保密') NOT NULL DEFAULT '保密' COMMENT '性别', `tel` CHAR(11) NOT NULL UNIQUE COMMENT '电话', `addr` VARCHAR(50) NOT NULL DEFAULT '北京' COMMENT '地址', `card` CHAR(18) NOT NULL UNIQUE COMMENT '身份证号', `married` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '0代表未结婚,1代表已结婚', `salary` FLOAT(8,2) NOT NULL DEFAULT 0 COMMENT '薪水' )ENGINE=INNODB DEFAULT CHARSET=UTF8;
表结构相关操作
添加字段 :ALTER TABLE table_name
ADD 字段名称 字段属性 [完整性约束条件][FIRST |AFTER 字段名称];
删除字段 :ALTER TABLE table_name
DROP 字段名称;
--测试添加或删除字段
1.建表
CREATE TABLE IF NOT EXISTS table_name( id INT UNSIGNED AUTO_INCREMENT KEY )
2.添加字段
ALTER TABLE table_name ADD username VARCHAR(20);
3.删除字段
ALTER TABLE table_name DROP username;
4.添加多个字段
ALTER TABLE table_name ADD age TINYINT UNSIGNED NOT NULL DEFAULT 18, ADD addr VARCHAR(50) NOT NULL DEFAULT '北京';
添加默认字段 :ALTER TABLE table_name
ALTER 字段名称 SET DEFAULT 默认值;
删除默认字段 : ALTER TABLE table_name
ALTER 字段名称 DROP DEFAULT;
修改字段类型、字段属性 :
ALTER TABLE table_name
MODIFY 字段名称 字段类型 [字段属性] [FIRST | AFTER 字段名称]
修改字段名称、字段类型、字段属性 :
ALTER TABLE table_name
CHANGE 原字段名称 新字段名称 字段类型 字段属性 [FIRST | AFTER 字段名称]
添加主键 : ALTER TABLE table_name
ADD PRIMARY KEY(字段名称)
删除主键 :ALTER TABLE table_name (如果有AUTO_INCREMENT去掉)
DROP PRIMARY KEY;
添加唯一 :ALTER TABLE table_name
ADD UNIQUE KEY |INDEX [index_name](字段名称);
删除唯一 :ALTER TABLE table_name
DROP index_name;
修改数据表名称 :
ALTER TABLE table_name RENAME [TO | AS] new_table_name;
RENAME TABLE table_name TO new_table_name;