数据库Database
是按照数据结构来组织、存储和管理数据的仓库。常见的数据库有Oracle
、DB2
、SQL Server
、MySQL
等...php
MySQL
是一个关系型数据库管理系统,开源免费,由瑞典MySQL AB
公司开发,目前属于Oracle
旗下产品。mysql
相关术语DB(Database)
:数据库是存储数据的集合。DBS(Database System)
:数据库系统,由数据库和数据库管理软件组成。DBMS(Database Management System)
:数据库管理系统,是操做和管理数据库的一个系统。SQL(Structured Query Language)
:结构化查询语言,是数据库的程序设计语言sql
MySQL
相关命令行操做数据库
配置文件:my.cnf 登陆信息中须要注意的: ---命令行须要以';'或者是'\g'结尾,否则没法结束; ---能够经过'help'或者'\h'或者'?'加上相关关键字来查看手册; ---'\c'能够取消当前命令的执行; mysql -uroot -p[密码] #登陆MySQL mysql -uroot -p -D db_name #登陆MySQL的同时打开数据库 exit; #退出MySQL quit; #退出MySQL \q; #退出MySQL ctrl+c #退出MySQL #获取当前MySQL的版本号 mysql -V; mysql --version;
SQL
语句语法规范数组
MySQL
的关键字须要大写,库名、表名、字段名称等使用小写;SQL
语句支持折行操做,拆分的时候不能把完整单词拆开;MySQL
的保留字,若是必需要使用,须要用反引号;经常使用SQL
语句SELECT USER();
#获得登陆的用户SELECT VERSION();
#获得MySQL的版本信息SELECT NOW();
#获得当前的日期时间SELECT DATABASE();
#获得当前打开的数据库缓存
SQL
的注释数据结构
#注释内容 --注释内容
数据库SQL
操做并发
#建立数据库 CREATE DATABASE|SCHEMA [IF NOT EXISTS] db_name; CREATE DATABASE|SCHEMA [IF NOT EXISTS] db_name DEFAULT CHARACTER SET [=] 'charset'; #指定编码格式 --注意:数据库名称最好有意义,名称不要包含特殊字符或者是MySQL关键字。 #修改数据库的编码方式 ALTER DATABASE db_name DEFAULT CHARACTER SET [=] 'charset'; #删除数据库 DROP DATABASE [IF EXISTS] db_name; #打开指定数据库 USE db_name; #在操做数据库里面的表以前须要先打开数据库 #SHOW方法 SHOW DATABASES|SCHEMAS; #查看所有的数据库 SHOW CREATE DATABASE db_name; #查看数据库的详细信息(编码格式) SHOW WARNINGS; #查看上一步操做产生的警告信息 #MySQL注释 '#'注释内容 '--'注释内容
数据表SQL
操做
数据库表是一系列二维数组的集合,用来表明和存储数据对象之间的关系,是数据库最重要的组成部分之一。
数据保存在表中,表名要求惟一,不要包含特殊字符,最好含义明确函数
表结构相关操做:工具
#建立表 CREATE TABLE[IF NOT EXISTS] table_name( 字段名称1 字段类型[完整性约束条件], 字段名称2 字段类型[完整性约束条件], ... )ENGINE=存储引擎 CHARSET=编码方式; #删除表 DROP TABLE [IF EXISTS] table_name; #查看表的建立信息 SHOW CREATE TABLE table_name; #查看当前数据库下全部的表 SHOW [FULL] TABLES [{FROM|IN} db_name]; #查看表结构 DESC table_name; DESCRIBE table_name; SHOW COLUMNS FROM table_name; #添加字段 ALTER TABLE table_name ADD 字段名称 字段属性[完整性约束条件] [FIRST|AFTER 字段名称]; #删除字段 ALTER TABLE table_name DROP 字段名称; #添加默认值 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 DROP PRIMARY KEY; #添加惟一 ALTER TABLE table_name ADD UNIQUE KEY|INDEX [index_name](字段名称) --若是不添加index_name,则索引名称默认为字段名称 #删除惟一 ALTER TABLE table_name DROP INDEX index_name; #修改数据表名称 ALTER TABLE table_name RENAME [TO|AS] new_table_name; RENAME TABLE table_name TO new_table_name;
关键字含义UNSIGNED
:无符号,没有负数,从0开始ZEROFILL
:零填充,当数据显示长度不够的时候可使用前补0的效果填充至指定长度NOT NULL
:非空约束,也就是插入值的时候这个字段必需要给值DEFAULT
:默认值,若是插入记录的时候没有给字段赋值,则会使用默认值 PRIAMARY KEY
:主键,标识记录的惟一性,值不能重复,一个表只能有一个主键UNIQUE KEY
:惟一性索引,一个表中能够有多个字段是惟一索引,一样的值不能重复,可是NULL除外AUTO_INCREASE
:自动增加,只能用于数值列,并且配合索引或主键使用FOREIGN KEY
:外键约束COMMENT
:添加注释
#设置主键的两种方式 CREATE TABLE test_primarykey(id INT UNSIGNED PRIMARY KEY, username VARCHAR(20)); #直接在字段后面设置属性 CREATE TABLE test_primarykey1(id INT UNSIGNED, username VARCHAR(20), PRIMARY KEY(id)); #利用函数设置字段
MySQL
数据类型
数值型
TINYINT
SMALLINT
MEDIUMINT
INT
BIGINT
BOOL/BOOLEAN
FLOAT
DOUBLE
DECIMAL
CHAR(M)
VARCHAR(M)
TINYTEXT
TEXT
MEDIUMTEXT
LONGTEXT
ENUM('', ''...)
SET('', ''...)
CHAR
和VARCHAR
的比较:CHAR
是定长,VARCHAR
变长;CHAR
效率高于VARCHAR
,CHAR
至关于拿空间换时间,VARCHAR
拿时间换空间;CHAR
默认存储数据的时候,后面会用空格填充到指定长度,而在检索的时候会去掉后面空格,VARCHAR
不会进行填充,检索的时候尾部的空格会留下。
注意:TEXT
类型的字段不能有默认值,检索的时候不存在大小写转换。
MySQL
中经常使用函数COUNT()
语法:COUNT(column_name)
:返回指定列的值的数目COUNT(*)
:返回表中的记录数目COUNT(DISTINCT column_name)
:返回指定列的不一样值的数目
CONCAT()
语法:CONCAT()
:用于将多个字符串链接成一个字符串。
用法:CONCAT(str1, str2, …)
,返回结果为链接参数产生的字符串,若是任何一个参数为NULL
,则返回为NULL
CONCAT_WS()
:用一个分隔符将多个字符串链接成一个字符串
用法:CONCAT_WS(separator, str1, str2, …)
,若是分隔符为NULL
,则返回为NULL
MySQL
存储引擎MyISAM
存储引擎
MyISAM
的表会在磁盘中产生三个文件:.frm
.MYD
.MYI
MyISAM
单表最大支持的数据量2的64次方条记录MyISAM
引擎的存储格式:定长FIXED
、动态DYNAMIC
、压缩COMPRESSED
InnoDB
存储引擎
ACID
模型Atomicity
原子性、Consistency
一致性、Isolation
隔离性、Durability
持久性,支持事务,具备从服务崩溃中恢复的能力,可以最大限度保护用户的数据InnoDB
拥有本身独立的缓冲池,经常使用的数据和索引都在缓存中记录SQL
操做
添加记录
#一条记录用VALUE,多条记录用VALUES INSERT [INTO] table_name[(col_name1, col_name2...)] VALUE|VALUES(value1, value2...); #不列出字段名称[须要按照建表时的字段顺序给每个字段赋值] INSERT [INTO] table_name VALUE(value1, value2...); #一次添加多条记录 INSERT [INTO] table_name[(col_name1, col_name2...)] VALUES(value1, value2...), (value1, value2...),...; #INSERT...SET语句 INSERT [INTO] table_name SET 字段名称=值,...; #INSERT...SELECT语句 INSERT [INTO] table_name SELECT 字段名称,... FROM table_name [WHERE条件语句];
修改记录
UPDATE table_name SET 字段名称1=值1, 字段名称2=值2,... [WHERE条件语句];
删除记录
DELETE FROM table_name [WHERE条件语句];
查询记录
# DESC:指定列按降序排列 ASC:指定列按升序排列 # GROUP BY:分组,把值相同放到一个组里,最终查询出的结果只会显示组中一条记录,分组配合GROUP_CONCAT()查看组中某个字段的详细信息 # ORDER BY:设置记录按照某字段的值进行排序,默认ASC升序 # LIMIT:限制结果集的显示条数,能够用来实现分页 LIMIT 数字:显示结果集的前几条记录 LIMIT offset, row_count:从offset开始[offset从0开始],显示几条记录 SELECT 字段1, 字段2,... FROM table_name [WHERE条件语句] [GROUP BY(col_name) Having 二次筛选] [ORDER BY(col_name) DESC|ASC] [LIMIT 限制结果集的显示条数]; #查询全部记录的全部字段 SELECT * FROM table_name; #查询指定字段的信息 SELECT 字段名称1, 字段名称2,... FROM table_name [WHERE条件语句]; #查询某数据库下某表的记录[这样能够不用打开该数据库就能操做该表] SELECT 字段名称1, 字段名称2,... FROM db_name.table_name [WHERE条件语句]; #给字段取别名[别名名称可使用中文] SELECT 字段名称 [AS] 别名名称,... FROM table_name [WHERE条件语句]; #给表取别名[单张表没有太大做用,多张表才体现] SELECT 字段名称1, 字段名称2,... FROM table_name [AS] 别名 [WHERE条件语句]; #表名.字段名称[单张表没有太大做用,多张表才体现] SELECT table_name.字段名称,... FROM table_name [WHERE条件语句] #WHERE条件[筛选符合条件的记录] 比较运算符:> < >= <= != <> <=> 逻辑运算符:AND(逻辑与) OR(逻辑或) IS [NOT] NULL:检测值是否为NULL或者NOT NULL 指定范围:[NOT] BETWEEN...AND 指定集合:[NOT] IN(值1, 值2,..) 匹配字符:[NOT] LIKE %:任意长度的字符串 _:任意一个字符 #模糊查询 在执行数据库查询时,分为完整查询和模糊查询。 格式:SELECT 字段1, 字段2,.. FROM table_name WHERE 某字段 LIKE 条件; 模糊查询包涵两种通配符: %:表示0个或多个字符,能够匹配任意类型或任意长度的字符。 LIKE '%王':匹配的是字段结尾为'王'的全部记录; LIKE '王%':匹配的是字段开头为'王'的全部记录; LIKE '%王%':匹配的是字段包含'王'的全部记录; _:表示任何单个字符,匹配单个任意字符,它经常使用来限制表达式的字符长度。 LIKE '_王':匹配的是字段长度为2,而且结尾为'王'的全部记录; LIKE '王_':匹配的是字段长度为2,而且开头为'王'的全部记录; LIKE '_王_':匹配的是字段长度为3,而且中间为'王'的全部记录; #经常使用聚合函数 COUNT():统计记录总数 SUM():求和 MAX():求最大值 MIN():求最小值 AVG():求平均值 #产生随机数 SELECT RAND(); #实现随机记录[出现的记录排序是随机的] SELECT * FROM table_name ORDER BY RAND(); #测试完整SELECT语句的形式 MariaDB [test004]> SELECT GROUP_CONCAT(name) AS '姓名', COUNT(*) AS '人数', SUM(age) AS '总和', MAX(age) AS '最大', MIN(age) AS '最小', AVG(age) AS '平均' FROM user WHERE id >=1 GROUP BY address ORDER BY '总和';
多表查询
1. 笛卡尔积形式 笛卡尔积是多表链接组成一个新表的状况,全部的链接方式都会先生成临时笛卡尔积表,笛卡尔积是关系代数里的一个概念,表示两个表中的每一行数据任意组合,新表的记录数为多张表的记录条数的乘积,实际应用中通常不知足需求,只有在两个表链接时加上限制条件,才有实际的意义。 test1 test2 +------+--------+ +------+--------+ | id | name | | id | name | +------+--------+ +------+--------+ | 1 | 小红 | | 1 | 张三 | | 2 | 小明 | | 2 | 李四 | +------+--------+ +------+--------+ MariaDB [test005]> select a.*, b.* from test1 a, test2 b; +------+--------+------+--------+ | id | name | id | name | +------+--------+------+--------+ | 1 | 张三 | 1 | 小红 | | 2 | 李四 | 1 | 小红 | | 1 | 张三 | 2 | 小明 | | 2 | 李四 | 2 | 小明 | +------+--------+------+--------+ 2. 内链接形式(经常使用) 利用内链接可获取两表的公共部分的记录 SELECT 字段名称,... FROM table_name1 INNER JOIN table_name2 ON 链接条件 3. 外链接形式 左外链接:以左表为主,先显示左表中的所有记录,再去右表中查询知足复合条件的记录,不符合的以NULL代替 SELECT 字段名称,... FROM table_name1 LEFT [OUTER] JOIN table_name2 ON 链接条件 右外链接:以右表为主,先显示右表中的所有记录,再去左表中查询知足复合条件的记录,不符合的以NULL代替 SELECT 字段名称,... FROM table_name1 RIGHT [OUTER] JOIN table_name2 ON 链接条件
图形化工具管理数据库
B/S结构 phpMyAdmin C/S结构 Sequel Pro Navicat for MySQL MySQL workbench