做网站策划用什么软件,辽宁平台网站建设平台,保险公司官方网站,做网站市场价格多少钱MySQL 所谓安装Mysql数据库#xff0c;就是在主机安装一个数据库管理系统(DBMS)#xff0c;这个管理程序可以管理多个数据库。 DBMS(database manage system) 一个数据库中可以创建多个表,以保存数据(信息)。 SQL 语句类型 DDL:数据定义语句[create表#xff0c;库…] DML:数…MySQL 所谓安装Mysql数据库就是在主机安装一个数据库管理系统(DBMS)这个管理程序可以管理多个数据库。 DBMS(database manage system) 一个数据库中可以创建多个表,以保存数据(信息)。 SQL 语句类型 DDL:数据定义语句[create表库…] DML:数据操作语句[增加insert修改update删除 delete] DQL:数据查询语句[select ] DCL:数据控制语句[管理数据库: 比如用户权限 grant revoke ] 数据库
创建
#使用指令创建数据库
CREATE DATABASE db01;#删除数据库指令
DROP DATABASE db01#创建一个使用utf8字符集的hsp_db02数据库
CREATE DATABASE db02 CHARACTER SET utf8#创建一个使用utf8字符集并带校对规则的hsp_db03数据库
CREATE DATABASE db03 CHARACTER SET utf8 COLLATE utf8_bin
#校对规则 utf8_bin 区分大小 默认utf8_general_ci 不区分大小写查看、删除
#查看当前数据库服务器中的所有数据库
SHOW DATABASES#查看前面创建的db01数据库的定义信息
SHOW CREATE DATABASE db01
#在创建数据库,表的时候为了规避关键字可以使用反引号解决比如有数据库的名称就叫做CREATE那么就需要使用 解决。#删除前面创建的db01数据库
DROP DATABASE db01备份
恢复数据库
#备份, 要在Dos下执行mysqldump指令其实在mysql安装目录\bin
#这个备份的文件就是对应的sql语句
mysqldump -u root -p -B db02 db03 d:\\bak.sqlDROP DATABASE ecshop;#恢复数据库(注意进入Mysql命令行再执行)
source d:\\bak.sql
#第二个恢复方法 直接将bak.sql的内容放到查询编辑器中执行相当于重新执行了一遍备份数据库的表
mysqldump -u 用户名 -p密码 数据库 表1 表2 表n d:\\文件名.sql表
创建
CREATE TABLE table_name
(field1 datatype,field2 datatype,field3 datatype
)character set 字符集 collate 校对规则 engine 存储引擎field:指定列名datatype:指定列类型(字段类型)character set:如不指定则为所在数据库字符集collate:如不指定则为所在数据库校对规则engine:引擎
#指令创建表
#注意db02创建表时要根据需保存的数据创建相应的列并根据数据的类型定义相应的列类型。例user表 (快速入门案例 create_tab01.sql)
#id 整形 [图形化指令]
#name 字符串
#password 字符串
#birthday 日期
CREATE TABLE user (id INT, name VARCHAR(255),password VARCHAR(255), birthday DATE)CHARACTER SET utf8 COLLATE utf8_bin ENGINE INNODB;修改表
NOT NULL DEFAULT 不允许为空NULL默认是一个空的’ 字符。
-- 员工表emp的上增加一个image列varchar类型(要求在resume后面)。
ALTER TABLE emp ADD image VARCHAR(32) NOT NULL DEFAULT AFTER RESUMEDESC employee -- 显示表结构可以查看表的所有列-- 修改job列使其长度为60。
ALTER TABLE empMODIFY job VARCHAR(60) NOT NULL DEFAULT -- 删除sex列。
ALTER TABLE empDROP sex-- 表名改为employee。
RENAME TABLE emp TO employee-- 修改表的字符集为utf8
ALTER TABLE employee CHARACTER SET utf8-- 列名name修改为us er_name
ALTER TABLE employee CHANGE name user_name VARCHAR(64) NOT NULL DEFAULT DESC employeeMysql 数据类型 MySQL 支持所有标准 SQL 数值数据类型。
这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL 和 NUMERIC)以及近似数值数据类型(FLOAT、REAL 和 DOUBLE PRECISION)。
关键字INT是INTEGER的同义词关键字DEC是DECIMAL的同义词。
BIT数据类型保存位字段值并且支持 MyISAM、MEMORY、InnoDB 和 BDB表。
作为 SQL 标准的扩展MySQL也支持整数类型 TINYINT、MEDIUMINT 和 BIGINT
类型大小范围有符号范围无符号用途TINYINT1 Bytes(-128127)(0255)小整数值SMALLINT2 Bytes(-32 76832 767)(065 535)大整数值MEDIUMINT3 Bytes(-8 388 6088 388 607)(016 777 215)大整数值INT或INTEGER4 Bytes(-2 147 483 6482 147 483 647)(04 294 967 295)大整数值BIGINT8 Bytes(-9,223,372,036,854,775,8089 223 372 036 854 775 807)(018 446 744 073 709 551 615)极大整数值FLOAT4 Bytes(-3.402 823 466 E38-1.175 494 351 E-38)0(1.175 494 351 E-383.402 823 466 351 E38)0(1.175 494 351 E-383.402 823 466 E38)单精度浮点数值DOUBLE8 Bytes(-1.797 693 134 862 315 7 E308-2.225 073 858 507 201 4 E-308)0(2.225 073 858 507 201 4 E-3081.797 693 134 862 315 7 E308)0(2.225 073 858 507 201 4 E-3081.797 693 134 862 315 7 E308)双精度浮点数值DECIMAL对DECIMAL(M,D) 如果MD为M2否则为D2依赖于M和D的值依赖于M和D的值小数值
日期和时间类型
表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。
每个时间类型有一个有效值范围和一个零值当指定不合法的MySQL不能表示的值时使用零值。
TIMESTAMP类型有专有的自动更新特性。
类型大小( bytes)范围格式用途DATE31000-01-01/9999-12-31YYYY-MM-DD日期值TIME3‘-838:59:59’/‘838:59:59’HH:MM:SS时间值或持续时间YEAR11901/2155YYYY年份值DATETIME8‘1000-01-01 00:00:00’ 到 ‘9999-12-31 23:59:59’YYYY-MM-DD hh:mm:ss混合日期和时间值TIMESTAMP4‘1970-01-01 00:00:01’ UTC 到 ‘2038-01-19 03:14:07’ UTC结束时间是第 2147483647 秒北京时间 2038-1-19 11:14:07格林尼治时间 2038年1月19日 凌晨 03:14:07YYYY-MM-DD hh:mm:ss混合日期和时间值时间戳
字符串类型 字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。
类型大小用途CHAR0-255 bytes定长字符串VARCHAR0-65535 bytes变长字符串TINYBLOB0-255 bytes不超过 255 个字符的二进制字符串TINYTEXT0-255 bytes短文本字符串BLOB0-65 535 bytes二进制形式的长文本数据TEXT0-65 535 bytes长文本数据MEDIUMBLOB0-16 777 215 bytes二进制形式的中等长度文本数据MEDIUMTEXT0-16 777 215 bytes中等长度文本数据LONGBLOB0-4 294 967 295 bytes二进制形式的极大文本数据LONGTEXT0-4 294 967 295 bytes极大文本数据 数值型
整数
#使用tinyint 来演示范围 有符号 -128 ~ 127 如果没有符号 0-255
#1. 如果没有指定 unsinged , 则TINYINT就是有符号
#2. 如果指定 unsinged , 则TINYINT就是无符号 0-255
CREATE TABLE t3 (id TINYINT);
CREATE TABLE t4 (id TINYINT UNSIGNED);INSERT INTO t3 VALUES(127); #这是非常简单的添加语句
SELECT * FROM t3INSERT INTO t4 VALUES(255);
SELECT * FROM t4;整数无符号
create table t10 (id tinyint );//默认是有符号的
create table t11 (id tinyint unsigned);//无符号的 后加unsigned就行bit
mysql create table t05 (num bit(8));
mysql insert into t05 (1, 3);
mysql insert into t05 values(2, 65);bit字段显示时按照位的方式显示查询的时候仍然可以用使用添加的数值
如果一个值只有01可以考虑使用bit(1), 可以节约空间
位类型。M指定位数默认值1范围1-64
#1. bit(m) m 在 1-64
#2. 添加数据 范围 按照你给的位数来确定比如 m 8 表示一个字节 0~255
#3. 显示按照bit
#4. 查询时仍然可以按照数来查询
CREATE TABLE t05 (num BIT(8));
INSERT INTO t05 VALUES(255); # 按位显示 255 就是全1 b11111111
SELECT * FROM t05;
SELECT * FROM t05 WHERE num 1;小数
FLOAT/DOUBLE [UNSIGNED]
Float单精度精度Double双精度
DECIMAL[M,D] [UNSIGNED]
可以支持更加精确的小数位。M是小数位数(精度)的总数D是小数点(标度)后面的位数。
如果D是0则值没有小数点或分数部分。M最大65D最大是30。
如果D被省略默认是0。如果M被省略默认是10。
#创建表
CREATE TABLE t06 (num1 FLOAT,num2 DOUBLE,num3 DECIMAL(30,20));
#添加数据
INSERT INTO t06 VALUES(88.12345678912345, 88.12345678912345,88.12345678912345);#decimal可以存放很大的数
CREATE TABLE t07 (num DECIMAL(65));
INSERT INTO t07 VALUES(8999999933338388388383838838383009338388383838383838383);CREATE TABLE t08(num BIGINT UNSIGNED)
INSERT INTO t08 VALUES(8999999933338388388383838838383009338388383838383838383);字符串
CHAR(size)
固定长度字符串最大255字符
VARCHAR(size)0~65535
可变长度字符串最大65532字节 utf8编码最大21844字符65535-3 / 3其中1-3个字节用于记录大小 #注释的快捷键 shiftctrlc , 注销注释 shiftctrlr
-- CHAR(size)
-- 固定长度字符串 最大255 字符
-- VARCHAR(size) 0~65535字节
-- 可变长度字符串 最大65532字节 【utf8编码最大21844字符 1-3个字节用于记录大小】
-- 如果表的编码是 utf8 varchar(size) size (65535-3) / 3 21844
-- 如果表的编码是 gbk varchar(size) size (65535-3) / 2 32766
CREATE TABLE t09 (name CHAR(255));CREATE TABLE t10 (name VARCHAR(32766)) CHARSET gbk;DROP TABLE t10;注意
char(4) //这个4表示字符数(最大255)不是字节数不管是中文还是字母都是放四个按字符计算
varchar(4) //这个4表示字符数不管是字母还是中文都以定义好的表的编码来存放数据
不管是中文还是英文字母都是最多存放4个是按照字符来存放的
char(4)是定长(固定的大小)就是说即使插入aa也会占用分配的4个字符的空间
varchar(4)是变长(变化的大小)就是说如果插入了aa实际占用空间大小并不是4个字符而是按照实际占用空间来分配(说明:varchar本身还需要占用1-3个字节来记录存放内容长度)
#演示字符串类型的使用细节
#char(4) 和 varchar(4) 这个4表示的是字符而不是字节, 不区分字符是汉字还是字母
CREATE TABLE t11(name CHAR(4));
INSERT INTO t11 VALUES(你好你好);SELECT * FROM t11;CREATE TABLE t12(name VARCHAR(4));
INSERT INTO t12 VALUES(你好你好);
INSERT INTO t12 VALUES(ab北京);
SELECT * FROM t12;#如果varchar 不够用可以考试使用mediumtext 或者longtext,
#如果想简单点可以使用直接使用text
CREATE TABLE t13( content TEXT, content2 MEDIUMTEXT , content3 LONGTEXT);
INSERT INTO t13 VALUES(你好你教育, 你好你教育100, 你好你教育1000~~);
SELECT * FROM t13;日期
CREATE TABLE birthday6( t1 DATE, t2 DATETIME,
t3 TIMESTAMP NOT NULL DEFAULTCURRENT TIMESTAMP ON UPDATE
CURRENT TIMESTAMP ); # timestamp时间戳
# NOT NULL DEFAULTCURRENT TIMESTAMP ON UPDATE CURRENT TIMESTAMP 意思是没有默认值的话会根据当前时间自动更新mysql INSERT INTO birthday (t1,t2)
VALUES(2022-11-11,2022-11-11 10:10:10);注意
TimeStamp在Insert和update时自动更新。
#创建一张表, date , datetime , timestamp
CREATE TABLE t14 (birthday DATE , -- 生日job_time DATETIME, -- 记录年月日 时分秒login_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP); -- 登录时间, 如果希望login_time列自动更新, 需要配置SELECT * FROM t14;
INSERT INTO t14(birthday, job_time) VALUES(2022-11-11,2022-11-11 10:10:10);
-- 如果我们更新 t14 表的某条记录login_time列会自动的以当前时间进行更新CURD Insert语句 (添加数据)
Update语句 (更新数据
Delete语句 (删除数据)
Select语句 (查找数据) Insert
-- 创建一张商品表goods (id int , goods_name varchar(10), price double );
-- 添加2条记录
CREATE TABLE goods (id INT ,goods_name VARCHAR(10), -- 长度10price DOUBLE NOT NULL DEFAULT 100 );-- 添加数据
INSERT INTO goods (id, goods_name, price) VALUES(10, 华为手机, 2000);INSERT INTO goods (id, goods_name, price) VALUES(20, 苹果手机, 3000);注意
-- 1.插入的数据应与字段的数据类型相同。
-- 比如 把 abc 添加到 int 类型会错误
INSERT INTO goods (id, goods_name, price) VALUES(abc, 小米手机, 2000);-- 2. 数据的长度应在列的规定范围内例如不能将一个长度为80的字符串加入到长度为40的列中。
INSERT INTO goods (id, goods_name, price) VALUES(40, vovo手机vovo手机vovo手机vovo手机vovo手机, 3000);-- 3. 在values中列出的数据位置必须与被加入的列的排列位置相对应。
INSERT INTO goods (id, goods_name, price) -- 不对VALUES(vovo手机,40, 2000);-- 4. 字符和日期型数据应包含在单引号中。
INSERT INTO goods (id, goods_name, price) VALUES(40, vovo手机, 3000); -- 错误的 vovo手机 应该 vovo手机-- 5. 列可以插入空值[前提是该字段允许为空如果指定 not null 则不可以]insert into table value(null)
INSERT INTO goods (id, goods_name, price) VALUES(40, vovo手机, NULL);-- 6. insert into tab_name (列名..) values (),(),() 形式添加多条记录
INSERT INTO goods (id, goods_name, price) VALUES(50, 三星手机, 2300),(60, 海尔手机, 1800);-- 7. 如果是给表中的所有字段添加数据可以不写前面的字段名称
INSERT INTO goods VALUES(70, IBM手机, 5000);-- 8. 默认值的使用当不给某个字段值时如果有默认值就会添加默认值否则报错-- 如果某个列 没有指定 not null ,那么当添加数据时没有给定值则会默认给null-- 如果我们希望指定某个列的默认值可以在创建表时指定
INSERT INTO goods (id, goods_name) VALUES(80, 格力手机);SELECT * FROM goods;update
-- 1. 将所有员工薪水修改为5000元。[如果没有带where 条件会修改所有的记录因此要小心]
UPDATE employee SET salary 5000 -- 2. 将姓名为 小妖怪 的员工薪水修改为3000元。
UPDATE employee SET salary 3000 WHERE user_name 小妖怪 -- 3. 将 老妖怪 的薪水在原有基础上增加1000元
INSERT INTO employee VALUES(200, 老妖怪, 1990-11-11, 2000-11-11 10:10:10, 捶背的, 5000, 给大王捶背, d:\\a.jpg);UPDATE employee SET salary salary 1000 WHERE user_name 老妖怪 -- 可以修改多个列的值
UPDATE employee SET salary salary 1000 , job 出主意的WHERE user_name 老妖怪
SELECT * FROM employee;注意
WHERE子句指定应更新哪些行。如没有WHERE子句则更新所有的行(记录)
如果需要修改多个字段可以通过 set 字段1值1,字段2值2... delete
删除只能按照行删除不能按照列删除。
-- 删除表中名称为’老妖怪’的记录。
DELETE FROM employee WHERE user_name 老妖怪;-- 删除表中所有记录, 老师提醒一定要小心
DELETE FROM employee;-- Delete语句不能删除某一列的值可使用update 设为 null 或者
UPDATE employee SET job WHERE user_name 老妖怪;-- 要删除这个表
DROP TABLE employee;注意
如果不使用where子句将删除表中所有数据。
Delete语句不能删除某一列的值(可使用update设为null 或者)
使用delete语句删除记录,不删除表本身。如要删除表使用droptable语句。drop table 表名; select
Select 指定查询哪些列的数据。
column 指定列名。
* 号代表查询所有列。
From 指定查询哪张表。
DISTINCT 可选, 指显示结果时是否去掉重复数据。
CREATE TABLE student(id INT NOT NULL DEFAULT 1,NAME VARCHAR(20) NOT NULL DEFAULT ,chinese FLOAT NOT NULL DEFAULT 0.0,english FLOAT NOT NULL DEFAULT 0.0,math FLOAT NOT NULL DEFAULT 0.0
);INSERT INTO student(id,NAME,chinese,english,math) VALUES(2,张飞,67,98,56);
INSERT INTO student(id,NAME,chinese,english,math) VALUES(3,宋江,87,78,77);
INSERT INTO student(id,NAME,chinese,english,math) VALUES(4,关羽,88,98,90);
INSERT INTO student(id,NAME,chinese,english,math) VALUES(5,赵云,82,84,67);
INSERT INTO student(id,NAME,chinese,english,math) VALUES(6,欧阳锋,55,85,45);
INSERT INTO student(id,NAME,chinese,english,math) VALUES(7,黄蓉,75,65,30);
INSERT INTO student(id,NAME,chinese,english,math) VALUES(8,韩信,45,65,99);SELECT * FROM student;-- 查询表中所有学生的信息。
SELECT * FROM student;
-- 查询表中所有学生的姓名和对应的英语成绩。
SELECT name,english FROM student;
-- 过滤表中重复数据 distinct 。
SELECT DISTINCT english FROM student;
-- 要查询的记录每个字段都相同才会去重
SELECT DISTINCT name, english FROM student;列运算和as别名
-- 统计每个学生的总分
SELECT name, (chineseenglishmath) FROM student;
-- 在所有学生总分加10分的情况
SELECT name, (chinese english math 10) FROM student;
-- 使用别名表示学生分数。
SELECT name AS 名字, (chinese english math 10) AS total_score FROM student;where 子句运算符
运算符使用场景符号比较运算符大小比较、、、、、、!、!范围运算符表达式值是否在指定的范围闭区间BETWEEN…AND…、NOT BETWEEN…AND…列表运算符判断表达式是否为列表中的指定项IN (项1,项2……) 、NOT IN (项1,项2……)模式匹配符判断值是否与指定的字符通配格式相符LIKE、NOT LIKE空值判断符判断表达式是否为空IS NULL、NOT IS NULL逻辑运算符用于多条件的逻辑连接NOT、AND、OR where 子句过滤查询
_匹配任意一个字符
%匹配0个或多个字符
[ ]匹配[ ]中的任意一个字符(若要比较的字符是连续的则可以用连字符“-”表 达 )
[^ ]不匹配[ ]中的任意一个字符
-- 查询姓名为赵云的学生成绩
SELECT * FROM student WHERE name 赵云-- 查询英语成绩大于90分的同学
SELECT * FROM student WHERE english 90-- 查询总分大于200分的所有同学
SELECT * FROM student WHERE (chinese english math) 200-- 查询math大于60 并且(and) id大于4的学生成绩
SELECT * FROM studentWHERE math 60 AND id 4-- 查询英语成绩大于语文成绩的同学
SELECT * FROM studentWHERE english chinese-- 查询总分大于200分 并且 数学成绩小于语文成绩,的姓赵的学生.
-- 赵% 表示 名字以赵开头的就可以
SELECT * FROM studentWHERE (chinese english math) 200 AND math chinese AND name LIKE 赵%-- 查询英语分数在 8090之间的同学。
SELECT * FROM studentWHERE english 80 AND english 90;
SELECT * FROM studentWHERE english BETWEEN 80 AND 90; -- between .. and .. 是 闭区间-- 查询数学分数为89,90,91的同学。
SELECT * FROM student WHERE math 89 OR math 90 OR math 91;
SELECT * FROM student WHERE math IN (89, 90, 91);order by 子句排序
Order by 指定排序的列排序的列既可以是表中的列名也可以是select语句后指定的列名
Asc升序[默认]、Desc降序
ORDER BY子句应位于SELECT语句的结尾
-- 对数学成绩排序后输出【升序】。
SELECT * FROM student ORDER BY math;-- 对总分按从高到低的顺序输出 [降序] -- 使用别名排序
SELECT name , (chinese english math) AS total_score FROM student ORDER BY total_score DESC;-- 对姓韩的学生成绩[总分]排序输出(升序) where order by
SELECT name, (chinese english math) AS total_score FROM studentWHERE name LIKE 韩%ORDER BY total_score;加强Select
通过子句强化使用select查找数据
-- ■ 使用where子句
-- ?如何查找1992.1.1后入职的员工
-- 在mysql中,日期类型可以直接比较, 需要注意格式
SELECT * FROM empWHERE hiredate 1992-01-01-- ■ 如何使用like操作符(模糊)
-- %: 表示0到多个任意字符 _: 表示单个任意字符
-- ?如何显示首字符为S的员工姓名和工资
SELECT ename, sal FROM empWHERE ename LIKE S%
-- ?如何显示第三个字符为大写O的所有员工的姓名和工资
SELECT ename, sal FROM empWHERE ename LIKE __O%-- ■ 如何显示没有上级的雇员的情况
SELECT * FROM empWHERE mgr IS NULL;-- ■ 查询表结构
DESC emp -- 使用order by子句
-- ?如何按照工资的从低到高的顺序[升序]显示雇员的信息
SELECT * FROM empORDER BY sal
-- ?按照部门号升序而雇员的工资降序排列 , 显示雇员信息SELECT * FROM empORDER BY deptno ASC , sal DESC;分页查询
select.... limit start, rows
表示从start1行开始取取出rows行 start 从0开始计算
-- 分页查询
-- 按雇员的id号升序取出 每页显示3条记录请分别显示 第1页第2页第3页-- 第1页
SELECT * FROM emp ORDER BY empno LIMIT 0, 3;
-- 第2页
SELECT * FROM emp ORDER BY empno LIMIT 3, 3;
-- 第3页
SELECT * FROM emp ORDER BY empno LIMIT 6, 3;
-- 推导一个公式
SELECT * FROM empORDER BY empno LIMIT 每页显示记录数 * (第几页-1) , 每页显示记录数-- 测试
SELECT job, COUNT(*) FROM emp GROUP BY job;
-- 显示雇员总数以及获得补助的雇员数
SELECT COUNT(*) FROM emp WHERE mgr IS NOT NULL;
SELECT MAX(sal) - MIN(sal) FROM emp;分组函数和子句
-- 增强group by 的使用-- (1) 显示每种岗位的雇员总数、平均工资。
SELECT COUNT(*), AVG(sal), job FROM emp GROUP BY job; -- (2) 显示雇员总数以及获得补助的雇员数。
-- 思路: 获得补助的雇员数 就是 comm 列为非null, 就是count(列)如果该列的值为null, 是不会统计
SELECT COUNT(*), COUNT(comm)FROM emp -- 统计没有获得补助的雇员数
SELECT COUNT(*), COUNT(IF(comm IS NULL, 1, NULL))FROM emp SELECT COUNT(*), COUNT(*) - COUNT(comm)FROM emp -- (3) 显示管理者的总人数。小技巧:尝试写-修改-尝试[正确的]
SELECT COUNT(DISTINCT mgr) FROM emp; -- (4) 显示雇员工资的最大差额。
-- 思路 max(sal) - min(sal)
SELECT MAX(sal) - MIN(sal) FROM emp;注意
如果select语句同时包含有group by、having、limit、order by
那么他们的顺序是group by , having , orderby, limit