mysql
一、mysql简介
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗
下公司。
开源的体积小、速度快、免费、小型的关系型数据库管理系统.
分为社区版和企业版
1、安装
官网:www.mysql.com
下载的过程:http://jingyan.baidu.com/article/eb9f7b6da17ccc869364e8d9.html
2、Mysql 目录结构
Bin—存储可执行文件
Data----存储数据库文件
Docs 文档
Include 存储包含的头文件
Lib 存储库文件
Script—第三方命令
Share— 语言包错误文件
3、数据库编码:控制台\s
Server characterset:服务器编码
Client characterset:客户端编码
Db characterset: 数据库编码
Conn. Characterset: 链接编码
配置mysql
修改配置文件 (在配置文件中修改)
default-character-set = utf8
character-set-server = utf8
collation-server = utf8_general_ci
4、数据库相关概念
数据库管理平台:是一个区别于数据库的软件,用来管理数据库程序
数据库引擎:可以执行sql语句的位置
数据库:保存数据信息
表:数据库基本单位,数据存放的地方
记录:一条数据
字段:(姓名、性别、班级)表的列名
5、数据库的管理
1)选择数据库
use 数据库名
2)增加数据库
1)新建一个数据库
create database 数据库名称
2)新建一个库并设置编码
create database 数据库名称 character set utf8 collate utf8_general_ci ;
3)删除数据库
drop database 库名
4)修改数据库
①修改数据库编码
I、 alter database 数据库名称 character set utf8 collate utf8_general_ci;
II、alter database school charset=utf8;
②修改数据库名称
a、可以直接去data文件夹下修改相对应的数据库(要求表必须是MYISAM)
b、创建新表,将就数据库中的数据表移动到新建的数据库中,然后将旧库删除 I、create database newDB;(创建新数据库)
II、rename table db.student to newDB.student,
db.user to newDB.user;(移动旧库中的数据到新库当中)
III、drop database db; (删除旧表)
5)查询数据库
①查询所有数据
show databases
②查询单个
show create database 数据库的名称;
二、数据库表的基本管理
1)增加数据表
①创建表
create table 表名(
字段名 数据类型(长度) 约束 设置编码,
字段名 数据类型(长度) 约束 设置编码,
字段名 数据类型(长度) 约束 设置编码
)
②创建表在不存在的情况下
create table if not exists 表名(
字段名 数据类型(长度) 约束 设置编码,
字段名 数据类型(长度) 约束 设置编码,
字段名 数据类型(长度) 约束 设置编码
)
③创建表在不存在的情况下并设置引擎和编码
create table if not exists 表名(
字段名 数据类型(长度) 约束 设置编码,
字段名 数据类型(长度) 约束 设置编码,
字段名 数据类型(长度) 约束 设置编码
)engine=InnoDB character set utf8 collate utf8_general_ci;
create table if not exists 表名(
字段名 数据类型(长度) 设置编码,
字段名 数据类型(长度) 设置编码,
字段名 数据类型(长度) 设置编码
)engine=InnoDB default charset=utf8;
2)删除数据表
drop table 表名;
3)改修改数据表
①修改表字段名及数据类型
alter table 表名 change 旧字段名 新字段名 数据类型 编码 约束索引;
alter table temp2 change pwd pwd varchar(25) character set utf8 collate utf8_general_ci not null;
②添加新的字段
alter table 表名 add 字段名 数据类型 约束索引;
③删除一个字段
alter table 表名 drop 字段;
④修改表名
alter table 旧表名 rename 新表名;
⑤添加约束
添加外键约束:alter table 表名 add foreign key(从表字段名) references 主表(主表字段);
添加唯一约束:alter table user add unique(字段)
添加主键约束:alter table 表名 primary key(字段)
⑥删除约束
alter table 表名 drop foreign key 外键名
4)查询数据表
①查询所有表
show tables
②查看表的结构
show create table 表名;
desc 表名
show columns from user;
5)常用的数据类型
定义:数据类型是指,存储过程参数,表达式和局部变量的数据特征,它决定了数据的存储格式,代表了不同的信息类型。
① 字型
整数 范围(无符号) 范围(有符号) 字节 用途
tinyint 0-255 2^7 (-128,127) 1 小整数
smallint (0,65535) 2^15(-32768,32767) 2 大整数
mediumint (0,16777215) 2^23 3 大整数
int (0,4294967295) 2^31 4 大整数
float(10,2) -3.4E+38~1.7E+38 7位 4 单精度
double(10,3) 16位 双精度
decimal() 货币
②字符串
char(n) 0-255 自动补全
varchar(n) 0-255 自适应
text 0-65535 大数据
longtext 0-4294967295 文章
enum(‘男’,‘女’,‘保密’) 65536个参数 枚举(单选)
set(‘游泳’,‘唱歌’,‘下棋’) 64个 任意组合(复选)
③时间类型
date 1000-01-01~9999-12-31 YYYY-MM-DD 日期
time -838:59:59~838:59:59 HH-MM-SS 时间、持续时间
year 1901-2155 YYYY 年
datetime 1000-01-01 00:00:00~9999-12-31 23:59:59 YYYY-MM-DD HH-MM-ss 混合时间
timestamp 1970-01-01 00:00:00~2037年某时 YYYYMMDD HHMMSS时间戳
8、索引和约束:使数据更具有唯一性和有效性,提高查询速率
【数据完整性】
1)实体完整性:要求表中的每一行数据都反应不同的实体,不能存在相同的数据行,可以通过设置约束、唯一约束、索引或标识列。
2)域完整性:指定列信息的有效性,可以通过限定数据类型、检查约束、外键约束、默认值、非空约束。
3)引用完整性:用来保存表之间已定义的关系,确保插入到表中数据是有效的,可以通过主键和外键之间的引用关系来实现。
1)约束:用来限制加入表的数据类型(在创建表或修改表时添加约束),主要完成对数据的检验,保证数据库的完整性,
如果有相互依赖的数据,保证其不能被删除
①not null:约束不能为空,如果不添加值,则无法插入记录或更新
""和0不属于null。
null:约束可以为空
a.创建表时
create table stu(
id int not null,
name varchar(20) null
)
b.修改时添加
alter table 表名 change 旧字段名 新字段名 数据类型 约束 索引;
②unique唯一约束
唯一约束,约束表中的列或列组合的数据不能相同(重复),虽然数据不能重复,但是可以重复是多个null。
一个表中可以有多个唯一约束。
a.创建表时添加约束
create table temp1(
id int not null unique,
name varchar(25) unique
);
create table temp(
id int not null,
name varchar(25),
password varchar(16),
);
b.修改时添加
alter table temp add unique(name,password);
alter table temp modify name varchar(20) unique;
c.删除约束
alter table temp drop index uk_name_pwd;
③primary key主键
相当于:not null+unique 一般都是自增长 auto_increment。
④设置默认值
使用default关键字
sex char(2) NOT NULL DEFAULT ‘1’
int类型:默认值也得是整型,并且default后边不要()括号。
char类型:默认值使用单引号。
DATETIME类型:NOW()函数以’YYYY-MM-DD
HH:MM:SS’返回当前的日期时间,可以直接存到DATETIME字段中。不支持使用系统默认值。
DATE类型:CURDATE()以’YYYY-MM-DD’的格式返回今天的日期,可以直接存到DATE字段中。不支持使用系统默认值。
TIME类型:CURTIME()以’HH:MM:SS’的格式返回当前的时间,可以直接存到TIME字段中。不支持使用系统默认值。
⑤添加外键约束
将一个表中的字段设置为主键是为了唯一标识每一条记录,防止数据冗余,而将表的字段设置一个表的外键,则是为了使两个关联数据保持同步,例如学生表中录入的班级表中的数据。
这时就应该建立一种“引用”关系,确保“子表”中存在。其中“外键”就可以达到这个目的,外键是对主键而言的,就是“子表”某列对应于“主表”中的“主键”列,它的值要求必须在主表列中先存在,主外键是用于实现引用完整性。
三、数据库数据管理
1)增
insert into 表名(字段名,字段名…) values(值1,值2,…);
如果不写字段名,则值得个数与顺序必须与表结构相同
注:A. 值列表的个数必须与列名数目保持一致
B.值列表中的数据类型、精度要与对应的类类型保持一致
C.可以不指定列名,但值列表中的值的顺序应该与表中字段顺序保持一致。
D.不应该为标示列字段指定值,因为它是系统控制自动增长的。
E.值列表中的数据项,符合对应列的检查约束的要求。
F.如果表中某些字段设置了为非空约束,那么insert语句必须为其指定列值。
2)删
delete from 表名 删除全部内容
delete from 表名 [where …] 删除符合条件的
3)改
update 表明 set 字段 = 值 [where ...]
4)查
(1)查询数据表中的部分列:
select 字段名1,字段名2… from 表名;
(2)查询数据表的所有数据
select * from 表名 查询表的所有数据(*表示所有字段名)
(3)使用where过滤部分数据
where 条件
①运算符
> (大于)
< (小于)
=(等于)
=(大于等于)
<=(小于等于)
!=(不等于)
②通配符
% 任意长度的字符串
_ 任意一个字节
[ ] 在指定范 围内的一个字符
[^] 不在指定范围内的任意字符
③逻辑表达式
And 连接的两边的条件都为真
Or 连接的两边的条件有一个为真
Not 否定条件
④模糊查询
like
% 任意多个字符
_ 任意一个字符
⑤使用in在限定值内进行模糊查询
Where <列名> [not] IN <[常量值]>
⑥使用between 。。。and 语句在指定范围内查询
Where <列名> [NOT] BETWEEN <起始表达式> and <结束表达式>
(4)使用as子句将列转换列名
(5)使用distinct关键字屏蔽重复数据
(6)使用 IS NULL 查询空数据
(7)如果要将多个表中的数据一并查出,并且以一个结果集的形式显示使用union联合查询
(8)使用order by 排序:
select * from 表名 order by 字段名 方式;
从小到大 asc
从大到小 desc
group by
(9)限制查询的记录数
select * from 表名 limit 从开始选取个数;
select * from 表名 limit 从哪开始,选取几个;
(10)分组统计与多表关联查询
聚合函数
min(): 最小值
max(): 最大值
sum(): 求和
count():统计总数
avg():平均值
分组统计 使用group by分组 使用having对数据进行筛选
Select 字段列表 [聚合函数] from 表 [where] 条件 group by<字段名称>
使用having子句对分组再次过滤
对分组结构进行排序
语法: select 字段列表 [聚合函数] from 表 [where 条件] [group by<字段列表>]
[having 条件] [order by 字段列表 ASC|DESC]
多表联合查询
内连接查询
语法:select <列名> from 表1 inner join 表2 on表1.列名 条件运算符 表2.列名 [where 条件] order by 排序列
语法:select <列名> from (表2 inner join 表1 on表1.列名 条件运算符 表2.列名)inner join表3 on表1.列名 条件运算符 表3列名 [where 条件] order by 排序列
外连接
左外连
左外连以左表为主表,去关联右表(从表)结果集除匹配的数据外,还包含左表数据在右表中不存在的数据行,这些数据行以null值代替。
语法:
Select <列名> from 左表 left join 右表
On 左表.列名 条件运算符 右表.列名
[where 条件]
[order by 排序列]
右外连
右外连以右表为主表,去关联左表(从表)结果集中包含主表所有数据行,如果主表的某行在从表中没有匹配行时,则该行的从表选择列为null
语法:
Select <列名> from 左表 right join 右表
On左表.列名 条件运算符 右表.列名
[where 条件]
[order by 排序列]
子查语句
一个查询语句是另一个查询的条件。
select * from temp2 where id=(select max(id) from temp2);
使用正则表达式
前面的字符或元子最少匹配次数 前面的字符或元子最多匹配次数
字符 * 0 次或 多次
字符 + 1 次或 多次
字符 ? 0 次或 1次
注意:一个汉字三个点
SELECT * FROM fruits WHERE f_name REGEXP ‘^西’; //以b开头的记录
查询包含邮箱的数据select * from fruits where f_name regexp “[0-9a-zA-Z_]+@(qq|163|sina).(com|COM|Com|COm|cOM|coM|CoM|cOm).?(cn|CN|Cn|cN)?”;
四、
MySQL函数
1、数学函数
函数名 作 用
ABS(x) x的绝对值
BIN(x) x的二进制(OCT返回八进制,HEX返回十六进制)
CEILING(x) 大于x的最小整数值
EXP(x) 值e(自然对数的底)的x次方
FLOOR(x) 小于x的最大整数值
GREATEST(x1,x2,…,xn) 集合中最大的值
LEAST(x1,x2,…,xn) 集合中最小的值
LN(x) x的自然对数
MOD(x,y) x/y的模(余数)
LOG(x,y) x的以y为底的对数
PI() pi的值(圆周率)
RAND() 0到1内的随机值,可以通过提供一个参数(种子)使RAND()随机数生成器生成一个指定的值。
ROUND(x,y) 参数x的四舍五入的有y位小数的值
SIGN(x) 代表数字x的符号的值
SQRT(x) 一个数的平方根
TRUNCATE(x,y) 数字x截短为y位小数的结果
2、聚合函数(常用于GROUP BY从句的SELECT查询中)
函数名 作 用
AVG(col) column列 返回指定列的平均值
COUNT(col) 返回指定列中非NULL值的个数
MIN(col) 返回指定列的最小值
MAX(col) 返回指定列的最大值
SUM(col) 返回指定列的所有值之和
GROUP_CONCAT(col) 返回由属于一组非NULL的列值连接组合而成的结果
3、字符串函数
函数名 作 用
ASCII(char) 返回字符的ASCII码值
BIT_LENGTH(str) 返回字符串的比特长度
LENGTH(s) 返回字符串str中的字符数
CONCAT(s1,s2…,sn) 将s1,s2…,sn连接成字符串
CONCAT_WS(sep,s1,s2…,sn) 将s1,s2…,sn连接成字符串,并用sep字符间隔
INSERT(str,x,y,instr) 将字符串str从第x位置开始,y个字符长的子串替换为字符串instr
REPLACE(str,x,y) 返回将字符串str中的所有x替换成y的字符串
FIND_IN_SET(str,list) 分析逗号分隔的list列表,如果发现str,返回str在list中的位置
LCASE(str)或LOWER(str) 返回将字符串str中所有字符改变为小写后的结果
LEFT(str,x) 返回字符串str中最左边的x个字符
RIGHT(str,x) 返回字符串str中最右边的x个字符
LTRIM(str) 从字符串str中切掉开头的空格
RTRIM(str) 返回字符串str尾部的空格
TRIM(str) 去除字符串首部和尾部的所有空格
POSITION(substr,str) 返回子串substr在字符串str中第一次出现的位置
QUOTE(str) 用反斜杠转义str中的单引号
REPEAT(str,srchstr,rplcstr) 返回字符串str重复x次的结果
REVERSE(str) 返回颠倒字符串str的结果
STRCMP(s1,s2) 比较字符串s1和s2
UCASE(str)或UPPER(str) 返回将字符串str中所有字符转变为大写后的结果
SUBSTR(str,x,y) SUBSTRING(str,x,y) 截取字符串x开始,截取y个长度
示例:
SELECT FIND_IN_SET(‘abc’,’abc,123,abc123,abc’); //返回1,因为abc第一次出现的位置是在后面的列表中的第一个位置,所以返回1。
STRCMP(S1,S2); 比较第一位的ASCII码如果第一位比较不出来,继续比较第二位。
4、日期和时间函数
函数名 作 用
CURDATE() CURRENT_DATE() 返回当前的日期
CURTIME() CURRENT_TIME() 返回当前的时间
NOW() 返回当前的日期和时间
DATE_ADD(date,INTERVAL int keyword) 返回日期date加上间隔时间int的结果(int必须按照关键字进行格式化),如:SELECTDATE_ADD(CURRENT_DATE,INTERVAL 6 MONTH);
DATE_FORMAT(date,fmt) 依照指定的fmt格式格式化日期date值
DATE_SUB(date,INTERVAL int keyword) 返回日期date加上间隔时间int的结果(int必须按照关键字进行格式化),
如:SELECTDATE_SUB(CURRENT_DATE,INTERVAL 6 MONTH);
DAYOFWEEK(date) 返回date所代表的一星期中的第几天(1~7)
DAYOFMONTH(date) 返回date是一个月的第几天(1~31)
DAYOFYEAR(date) 返回date是一年的第几天(1~366)
DAYNAME(date) 返回date的星期名,如:SELECT DAYNAME(CURRENT_DATE);
FROM_UNIXTIME(ts,fmt) 根据指定的fmt格式,格式化UNIX时间戳ts
HOUR(time) 返回time的小时值(0~23)
MINUTE(time) 返回time的分钟值(0~59)
MONTH(date) 返回date的月份值(1~12)
MONTHNAME(date) 返回date的月份名,
如:SELECT MONTHNAME(CURRENT_DATE);
QUARTER(date) 返回date在一年中的季度(1~4)
如SELECT QUARTER(CURRENT_DATE);
WEEK(date) 返回日期date为一年中第几周(0~53)
YEAR(date) 返回日期date的年份(1000~9999)
timestampadd(hour, -8, ‘2008-08-08 12:00:00’) 2008-08-08 04:00:00
convert_tz(dt,from_tz,to_tz) select convert_tz(‘2008-08-08 12:00:00’, ‘+08:00’, ‘+00:00’); – 2008-08-08 04:00:00
示例:
获取当前系统时间:SELECT FROM_UNIXTIME(UNIX_TIMESTAMP());
SELECT EXTRACT(YEAR_MONTH FROM CURRENT_DATE);
SELECT EXTRACT(DAY_SECOND FROM CURRENT_DATE);
SELECT EXTRACT(HOUR_MINUTE FROM CURRENT_DATE);
返回两个日期值之间的差值(月数):SELECT PERIOD_DIFF(200302,199802);
select str_to_date(‘08/09/2008’, ‘%m/%d/%Y’); – 2008-08-09
select str_to_date(‘08/09/08’ , ‘%m/%d/%y’); – 2008-08-09
select str_to_date(‘08.09.2008’, ‘%m.%d.%Y’); – 2008-08-09
select str_to_date(‘08:09:30’, ‘%h:%i:%s’); – 08:09:30
select str_to_date(‘08.09.2008 08:09:30’, ‘%m.%d.%Y %h:%i:%s’); – 2008-08-09 08:09:30
在Mysql中计算年龄:
SELECT DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(birthday)),’%Y’)+0 AS age FROM employee;
这样,如果Brithday是未来的年月日的话,计算结果为0。
下面的SQL语句计算员工的绝对年龄,即当Birthday是未来的日期时,将得到负值。
SELECT DATE_FORMAT(NOW(), ‘%Y’) - DATE_FORMAT(birthday, ‘%Y’) -(DATE_FORMAT(NOW(), ‘00-%m-%d’) <DATE_FORMAT(birthday, ‘00-%m-%d’)) AS age from employee
5、
加密函数
函数名 作 用
AES_ENCRYPT(str,key) 返回用密钥key对字符串str利用高级加密标准算法加密后的结果,调用AES_ENCRYPT的结果是一个二进制字符串,以BLOB类型存储
AES_DECRYPT(str,key) 返回用密钥key对字符串str利用高级加密标准算法解密后的结果
DECODE(str,key) 使用key作为密钥解密加密字符串str
ENCRYPT(str,salt) 使用UNIXcrypt()函数,用关键词salt(一个可以惟一确定口令的字符串,就像钥匙一样)加密字符串str
ENCODE(str,key) 使用key作为密钥加密字符串str,调用ENCODE()的结果是一个二进制字符串,它以BLOB类型存储
MD5() 计算字符串str的MD5校验和
PASSWORD(str) 返回字符串str的加密版本,这个加密过程是不可逆转的,和UNIX密码加密过程使用不同的算法。
SHA() 计算字符串str的安全散列算法(SHA)校验和
示例:
SELECT ENCRYPT(‘root’,‘salt’);
SELECT ENCODE(‘xufeng’,‘key’);
SELECT DECODE(ENCODE(‘xufeng’,‘key’),‘key’);#加解密放在一起
SELECT AES_ENCRYPT(‘root’,‘key’);
SELECT AES_DECRYPT(AES_ENCRYPT(‘root’,‘key’),‘key’);
SELECT MD5(‘123456’);
SELECT SHA(‘123456’);
数据库设计三范式
第一范式的目标是确保每列的原子性,即数据表中的字段都是单一的属性的,不可再分。
第二范式是在第一范式的基础上,确保表中的每列都和主键相关,即要求一个表只描述一件事情。
第三范式是在第二范式的基础上,确保表中每列都和主键直接相关,而不是间接相关。间接相关又称为传递依赖。
mysql 常用语句
注意:mysql语句中除字符串中内容,其他都是用英文。
CURD 就是增删改查
C : create (增加)
U :update (修改)
R :read(读取也就是查询)
D :delete(删除)
1连接数据库
例:mysql -uroot –proot
2查看数据库列表
例:show databases;
3创建数据库
create database + 数据库名称
例:create database 1607phpb;
4删除数据库
drop database + 数据库名称
例:drop database 1607phpb;
5使用数据库
例:use database;
6查看数据表列表
例:show tables;
7设置字符集
例:set names gbk;
8数据库的数据类型:
①字符串: varchar 和 char存储字符串
最大长度255(存储电话、用户名、密码等)
varchar(10) 与char(10)区别
当你存储的数据占据了3个字符
char(10)个全部占用,你规定几个长度我就占用几个
varchar(10)有几个占几个 存储3个剩下7个
varchar 比 char要节省空间
char执行效率比varchar要快 要节省时间
②文本: text 文本 存储(文章信息、自我介绍等)√
longtext 超长文本
③整数:
int 4 存储整数(id,年龄、数量、状态) 11位
smallint 2
tinyint 1
bigint 8
④小数/浮点:
float
double
定点:decimal(数据长度,保留几个小数) √
精确保留几位小数
⑤时间:
time 08:42:30
datetime 2014-09-18 08:42:30 √
timestamp 20140918 084230
date 2014-09-18
9创建表(以创建一个用户表user为例)
create table user (id int not null auto_increment), id 是一张表的主键,不能为空,自增
name varchar(60),
age int,
sex varchar(10),
addr varchar(60),
phone_number varchar(11), 手机号一般用varchar,也可用int
//
mysql> create table user_info (id int not null auto_increment,
-> name varchar(60),
-> sex varchar(10),
-> tel char(11),
-> theory float,
-> skill float,
-> create_time datetime,
-> primary key(id)
-> ) auto_increment=1;
Query OK, 0 rows affected (0.48 sec)
//
10删除数据表
drop table + 表名
例:drop table user;
11查看表结构 desc + 表名
例:desc user;
12备份数据库:
进入cmd里
mysqldump -uroot -proot > 你要保存的地方/你要保存的文件.sql
13在数据库里添加列字段:
alter table 表名 add column 字段 (存储数据类型)
alter table user add email varchar(50);
alter table 表名 change 旧字段 新字段(存储数据类型)
alter table user change age age1;
14向表中插入信息
auto 自动
increment 增长
auto_increment 自增
defualt 默认的
primary 主要的
key 键盘,匙
primary key 主键
15 insert into 表名(字段1,字段2) values(‘值1’,‘值2’);
例:insert into user (name,age,sex,addr,phone_number)values(‘zhangsan’,12,’黄埔大学’,’13126555525’);
16查询表中信息
select * from 表名
例:select * from user;
17查询(带条件)
注意:where条件后面永远跟字段名,加上where就是为了限定条件
例:select * from user where id = 1;
select * from user where name = ‘zhangsan’;
select * from user where age = 12;
18删除表中一条信息
delete from 表名
例:delete from user where id=1;
19修改表中信息
udpate 表名 set 字段1 = ‘值1’,字段2 = ‘值2’ where id = 你想要修改的id
例:update user set age=18 where id=1;
20按排序查询
○1默认按升序
例:select * from user 与 select * from user order by id asc 相同
○2按降序查询
例:select * from user order by id desc;
21 between and(在…之间)
用在哪:一段时间到另一段时间的数据
例:select * from user where age between 15 and 20;
22限制查询条数 limit
例:select * from user limit 2; 查询前两条
select * from user limit 2,5; 查询第2到第5的数据
23模糊查询关键字
like ‘%你要查询的关键字%’
例:select * from user where name like ‘%张%’ 搜索数据里带张的数据
select * from user where name like ‘_张%’ 搜索数据里第二个是张的数据
% 匹配任意多个字符
_匹配任意单个字符
行称之为数据
列称之为字段
-
向表中添加一条数据:iphone6、1999.0,限量版iphone6有货啦、北京、1000、苹果公司
set names gbk;
insert into goods(name
,price
,intro
,num
,works
,place
) values(‘iphone6’,‘1999’,‘限量版iphone6有货啦’,‘1000’,‘苹果公司’,‘北京’); -
查询出商品库存在10到20之间的最贵的三件商品
select * from goods where num between 10 and 20 order by price desc limit 3; -
查询出商品名称中是水开头,产地为北京,或者商品库存小于10的商品信息
select * from goods where name like ‘水%’ and place=‘北京’ or num<10; -
查询出商品描述中带有热卖,或者库存量大于50的商品,从第5条开始取,取10条
select * from goods where intro like ‘%热卖%’ or num>50 limit 4,10; -
查询出商品名称中包含iphone的商品名称、商品库存
select name,num from goods where name like ‘%iphone%’; -
查询出商品产地为河南或者商品描述中带有河南的最便宜的5件商品
select * from goods where place = ‘河南’ or intro like ‘%河南%’ order by price asc limit 5; -
查询出商品生产厂家是苹果或者是戴尔,商品名称中包含电脑的,库存量大于50的前15件商品信息
select * from goods where works =‘苹果’ or works=‘戴尔’ and name like ‘%电脑%’ and num > 50 order by num limit 15;
创建数据表,表名为 goods,包含字段:商品编号id、商品名称name、商品单价price、商品描述intro、商品产地place、商品库存num、生产厂家works,其中商品编号设置为主键primary key、自增 auto_increment
-
将表中库存量小于15的库存改为1000
update goods set num =‘1000’ where num<15; -
将库存在15到50之间的商品产地修改为北京
Update goods set place =‘北京’ where num between 15 and 50; -
将产地为北京或者商品描述中带有电视机的前5件商品名称改为thinkpad
update goods set name =‘thinkpad’ where place =‘北京’ or intro like ‘%电视机%’ order by id asc limit 5; -
将商品名称是think开头的商品信息的生产厂家改为联想
update goods set works = ‘联想’ where name like ‘think%’; -
将表中所有数据的库存量翻倍
update goods set num = num * 2; -
删除商品编号为001、002、005、009的商品信息
delete from goods where id in (1,2,5,9); -
删除库存量在10到20之间商品名称为iphone的商品信息
delete from goods where num between 10 and 20 and name like ‘%iphone%’; -
删除商品产地为河南或者商品描述带有河南的商品信息
delete from goods where place =‘河南’ or intro like ‘%河南%’; -
删除最贵的三件商品
delete from goods order by price desc limit 3;