通过上面的比较,我们可以看出,使用数据库存储数据, 用户可以非常方便对数据库中的数据进行增加, 删除, 修改及查询操作。
为什么选择MySQL?
SQL语句可以单行 或者 多行书写,以分号 结尾 ; (Sqlyog中可以不用写分号)
可以使用空格和缩进来增加语句的可读性。
MySql中使用SQL不区分大小写,一般关键字大写,数据库名 表名列名 小写。
注释方式
分类 说明
数据定义语言 简称DDL(Data Definition Language),用来定义数据库对象:数据库,表,列等。
数据操作语言 简称DML(Data Manipulation Language),用来对数据库中表的记录进行更新。
数据查询语言 简称DQL(Data Query Language),用来查询数据库中表的记录。
数据控制语言 简称DCL(Date Control Language),用来定义数据库的访问权限和安全级别,及创建用户。(了解)
/*
创建数据库 方式1:指定名称的数据库
latin1 编码
*/
CREATE DATABASE db1;
/*
方式2:指定字符集的方式创建数据库
utf8
*/
CREATE DATABASE db1_1 CHARACTER SET utf8;
/*
/*
查看数据库
*/
# 切换数据库
USE db1_1;
USE db1;
# 查询当前正在使用的数据库
SELECT DATABASE();
# 查询当前数据库的基本信息
SHOW CREATE DATABASE db1;
# 查询Mysql中有哪些数据库
SHOW DATABASES;
修改数据库字符集
-- 修改数据库的字符集
# 语法格式:alter database 数据库名 Character set utf8;
ALTER DATABASE db1 CHARACTER SET utf8;
# 删除数据库的操作
# 语法格式:drop database 数据库名称 将数据库从Mysql中永久的删除
DROP DATABASE db1_1;
注意:MySQL中的 char类型与 varchar类型,都对应了 Java中的字符串类型,区别在于:
char类型是固定长度的: 根据定义的字符串长度分配足够的空间。
varchar类型是可变长度的: 只使用字符串长度所需的空间
比如:保存字符串 "abc"
x char(10) 占用10个字节
y varchar(10) 占用3个字节
适用场景:
语法格式:
CREATE TABLE 表名(
字段名称1 字段类型(长度),
字段名称2 字段类型 注意 最后一列不要加逗号
);
表名:category
表中字段:
分类ID :cid ,为整型
分类名称:cname,为字符串类型,指定长度20
-- 创建分类表
CREATE TABLE category(
cid INT,
cname VARCHAR(20)
);
表名: test1
表中字段:
测试ID : tid ,为整型
测试时间: tdate , 为年月日的日期类型
CREATE TABLE test1(
tid INT,
tdate DATE
);
create table 新表明 like 旧表名
/*
create table 新表名 like 旧表名
*/
-- 创建一个与test1表结构相同的test2表
CREATE TABLE test2 LIKE test1;
命令 说明
show tables; 查看当前数据库中的所有表名
desc 表名; 查看数据表的结构
命令 说明
drop table 表名; 删除表(从数据库中永久删除某一张表)
drop table if exists 表名; 判断表是否存在,存在的话就删除,不存在就不执行删除
语法格式
rename table 旧表名 to 新表名
需求: 将category表 改为 category1
语法格式:
alter table 表名 character set 字符集
语法格式:
alert table 表名 add 字段名称 字段类型
语法格式:
alter table 表名 modify 字段名称 字段类型
语法格式:
alter table 表名 change 旧列名 新列名 类型(长度);
语法格式:
alter table 表名 drop 列名;
SQL中的DML 用于对表中的数据进行增删改操作
语法格式:
insert into 表名 (字段名1,字段名2...) values(字段值1,字段值2...);
1)代码准备,创建一个学生表:
表名:student
表中字段:
学员ID, sid int
姓名, sname varchar(20)
年龄, age int
性别, sex char(1)
地址, address varchar(40)
# 创建学生表
CREATE TABLE student(
sid INT,
sname VARCHAR(20),
age INT,
sex CHAR(1),
address VARCHAR(40)
);
2)向 学生表中添加数据,3种方式
INSERT INTO student (sid,sname,age,sex,address) VALUES(1,‘孙悟空‘,20,‘男‘,‘花果山‘);
INSERT INTO student VALUES(2,‘孙悟饭‘,10,‘男‘,‘地球‘);
INSERT INTO category (cname) VALUES(‘白骨精‘);
注意:
语法格式1:不带条件的修改
update 表名 set 列名 = 值
语法格式2:带条件的修改
update 表名 set 列名 = 值 [where 条件表达式:字段名 = 值 ]
1)不带条件修改,将所有的性别改为女(慎用!!)
UPDATE student SET sex = ‘女‘;
2)带条件的修改,将sid 为3的学生,性别改为男
UPDATE student SET sex = ‘男‘ WHERE sid = 3;
3)一次修改多个列, 将sid为 2 的学员,年龄改为 20,地址改为 北京
UPDATE student SET age = 20,address = ‘北京‘ WHERE sid = 2;
语法格式1:删除所有数据
delete from 表名
语法格式2: 指定条件 删除数据
delete from 表名 [where 字段名 = 值]
(1)删除 sid 为 1 的数据
DELETE FROM student WHERE sid = 1;
(2)删除所有数据
DELETE FROM student;
(3)如果要删除表中的所有数据,有两种做法
delete from 表名; 不推荐. 有多少条记录 就执行多少次删除操作. 效率低
truncate table 表名: 推荐. 先删除整张表, 然后再重新创建一张一模一样的表. 效率高
truncate table student;
#创建员工表
表名 emp
表中字段:
eid 员工id,int
ename 姓名,varchar
sex 性别,char
salary 薪资,double
hire_date 入职时间,date
dept_name 部门名称,varchar
#创建员工表
CREATE TABLE emp(
eid INT,
ename VARCHAR(20),
sex CHAR(1),
salary DOUBLE,
hire_date DATE,
dept_name VARCHAR(20)
);
#添加数据
INSERT INTO emp VALUES(1,‘孙悟空‘,‘男‘,7200,‘2013-02-04‘,‘教学部‘);
INSERT INTO emp VALUES(2,‘猪八戒‘,‘男‘,3600,‘2010-12-02‘,‘教学部‘);
INSERT INTO emp VALUES(3,‘唐僧‘,‘男‘,9000,‘2008-08-08‘,‘教学部‘);
INSERT INTO emp VALUES(4,‘白骨精‘,‘女‘,5000,‘2015-10-07‘,‘市场部‘);
INSERT INTO emp VALUES(5,‘蜘蛛精‘,‘女‘,5000,‘2011-03-14‘,‘市场部‘);
INSERT INTO emp VALUES(6,‘玉兔精‘,‘女‘,200,‘2000-03-14‘,‘市场部‘);
INSERT INTO emp VALUES(7,‘林黛玉‘,‘女‘,10000,‘2019-10-07‘,‘财务部‘);
INSERT INTO emp VALUES(8,‘黄蓉‘,‘女‘,3500,‘2011-09-14‘,‘财务部‘);
INSERT INTO emp VALUES(9,‘吴承恩‘,‘男‘,20000,‘2000-03-14‘,NULL);
INSERT INTO emp VALUES(10,‘孙悟饭‘,‘男‘, 10,‘2020-03-14‘,财务部);
INSERT INTO emp VALUES(11,‘兔八哥‘,‘女‘, 300,‘2010-03-14‘,财务部);
语法格式
select 列名 from 表名
需求1: 查询emp中的 所有数据
SELECT * FROM emp; -- 使用 * 表示所有列
需求2: 查询emp表中的所有记录,仅显示id和name字段
SELECT eid,ename FROM emp;
需求3: 将所有的员工信息查询出来,并将列名改为中文
# 使用 AS关键字,为列起别名
SELECT
eid AS ‘编号‘,
ename AS ‘姓名‘ ,
sex AS ‘性别‘,
salary AS ‘薪资‘,
hire_date ‘入职时间‘, -- AS 可以省略
dept_name ‘部门名称‘
FROM emp;
-- 使用distinct 关键字,去掉重复部门信息
SELECT DISTINCT dept_name FROM emp;
SELECT ename , salary + 1000 FROM emp;
条件查询:先取出表中的每条数据,满足条件的返回,不满足的过滤掉。
如果查询语句中没有设置条件,就会查询所有的行信息,在实际应用中,一定要指定查询条件,对记录进行过滤
语法格式
select 列名 from 表名 where 条件表达式
* 先取出表中的每条数据,满足条件的数据就返回,不满足的就过滤掉
运算符
(1)比较运算符
(2)逻辑运算符
需求1:
# 查询员工姓名为黄蓉的员工信息
# 查询薪水价格为5000的员工信息
# 查询薪水价格不是5000的所有员工信息
# 查询薪水价格大于6000元的所有员工信息
# 查询薪水价格在5000到10000之间所有员工信息
# 查询薪水价格是3600或7200或者20000的所有员工信息
需求2:
# 查询含有‘精‘字的所有员工信息
# 查询以‘孙‘开头的所有员工信息
# 查询第二个字为‘兔‘的所有员工信息
# 查询没有部门的员工信息
# 查询有部门的员工信息
模糊查询 通配符
原文:https://www.cnblogs.com/china-soldier/p/15050698.html