1.1.通过私有构造器强化不可实例化的能力。
1.2.数据实现集中控制
1.3.数据一致性,完整性和可维护性,以确保数据的安全性和可靠性
SQL
DDL数据库定义语言 Data Definition Language
DCL数据库控制语言 Data Control Language
DML数据库操控语言 Data Manipulation Language
2.1.创建库 create database 库名 [character set 码表 collate 字符校对集]
2.2.显示所有库 show databases;
2.3.删除库 drop database 库名;
2.4.修改数据库码表 alter database 库名 character set 码表 collate 字符校对集
2.5.使用数据库 use 库名
2.6.查看当前使用的库 select database();
2.7.显示创建库语句 show create database 库名;
1.创建表
create table t_user(
id int,
name varchar(20),
sal double(4,3),
birthday datetime,
hiredate timestamp
);
varchar最好指定长度
整型一般不指定.
2.查看当前库中有哪些表
show tables;
3.查看表的结构
desc 表名; description
desc t_user;
4.删除表
drop table 表名;
drop table t_user;
5.添加一列
alter table 表名 add 列名 类型;
alter table t_user add photo blob;
6.修改列的类型
alter table 表名 modify 列名 类型;
alter table t_user modify photo varchar(20);
7.修改列的名称
alter table 表名 change 旧列名 新列名 数据类型;
将 photo这一列 改名为 image
alter table t_user change photo image varchar(20);
8.删除某列
alter table 表名 drop 列名;
alter table t_user drop image;
9.修改表的名称
rename table 旧表名 to 新名;
rename table t_user to user;
10(用的极少)修改表的字符集. (如果创建表时不指定,默认使用数据库的字符集)
alter table 表名 character set 字符集 collate 校对集;
alter table t_user character set utf8 collate utf8_bin;
列的约束保证数据的完整性的.
1.非空约束(not null) 指定非空约束的列, 在插入记录时 必须包含值.
2.唯一约束(unique) 该列的内容在表中. 值是唯一的.
3.主键约束(primary key) 当想要把某一列的值,作为该列的唯一标示符时,可以指定主键约束(包含 非空约束和唯一约束).
一个表中只能指定一个主键约束列.
主键约束 , 可以理解为 非空+唯一.
约束体现数据库的完整性.
例如:创建带有约束的表
create table t_user2(
id int primary key auto_increament, -- 员工编号
name varchar(10) not null, -- 员工姓名
loginname varchar(10) not null unique, -- 登陆名称
password varchar(20) not null, -- 密码
age int(3) not null, -- 年龄
birthday datetime not null, -- 生日
hiredate timestamp not null -- 入职日期
);
1.在上面员工表(employee表中)的基础上增加一个image列。
alter table employee add image varchar(20);
2.修改job列,使其长度为60。
alter table employee modify job varchar(60);
3.删除gender列。
alter table employee drop gender;
4.表名改为user。
rename table employee to user;
5.修改表的字符集为utf8
6.列名name修改为username
alter table employee change name username varchar(20);
为表添加记录
insert into 表名[(列名1,列名2...)] values (值1,值2...);
1.插入一条数据
1>指定要插入那些列
insert into t_user(name,email) values('tom','[email protected]');
2>不指定插入哪些列, 需要指定每一列的值
insert into t_user values(null,'jerry','[email protected]')
insert into t_user(name,email) values('汤姆','[email protected]');
CREATE TABLE emp( -- 员工表
empno INT, -- 员工编号
ename VARCHAR(50), -- 员工姓名
job VARCHAR(50), -- 工作
mgr INT, -- 员工上司的编号
hiredate DATE, -- 入职日期
sal DECIMAL(7,2), -- 工资
comm DECIMAL(7,2), -- 奖金
deptno INT -- 部门编号
);
INSERT INTO emp VALUES(7369,'SMITH','CLERK',7902,'1980-12-17',800,NULL,20);
INSERT INTO emp VALUES(7499,'ALLEN','SALESMAN',7698,'1981-02-20',1600,300,30);
INSERT INTO emp VALUES(7521,'WARD','SALESMAN',7698,'1981-02-22',1250,500,30);
INSERT INTO emp VALUES(7566,'JONES','MANAGER',7839,'1981-04-02',2975,NULL,20);
INSERT INTO emp VALUES(7654,'MARTIN','SALESMAN',7698,'1981-09-28',1250,1400,30);
INSERT INTO emp VALUES(7698,'BLAKE','MANAGER',7839,'1981-05-01',2850,NULL,30);
INSERT INTO emp VALUES(7782,'CLARK','MANAGER',7839,'1981-06-09',2450,NULL,10);
INSERT INTO emp VALUES(7788,'SCOTT','ANALYST',7566,'1987-04-19',3000,NULL,20);
INSERT INTO emp VALUES(7839,'KING','PRESIDENT',NULL,'1981-11-17',5000,NULL,10);
INSERT INTO emp VALUES(7844,'TURNER','SALESMAN',7698,'1981-09-08',1500,0,30);
INSERT INTO emp VALUES(7876,'ADAMS','CLERK',7788,'1987-05-23',1100,NULL,20);
INSERT INTO emp VALUES(7900,'JAMES','CLERK',7698,'1981-12-03',950,NULL,30);
INSERT INTO emp VALUES(7902,'FORD','ANALYST',7566,'1981-12-03',3000,NULL,20);
INSERT INTO emp VALUES(7934,'MILLER','CLERK',7782,'1982-01-23',1300,NULL,10);
6.1 条件查询介绍
条件查询就是在查询时给出WHERE子句,在WHERE子句中可以使用如下运算符及关键字:
? =、!=、<>、<、<=、>、>=;
? BETWEEN…AND;
? IN(SET)/NOT IN(SET)
? IS NULL/IS NOT NULL
//---条件连接符
? AND; &&
? OR; ||
? NOT; !
6.2 查询性别为女,并且年龄小于50的记录
select * from stu where gender='female' and age<50;
6.3 查询学号为S_1001,或者姓名为liSi的记录
select * from stu where sid='S_1001' or sname='liSi';
数据库中,sql语句不区分大小写 ,但是 数据区分大小写.
6.4 查询学号为S_1001,S_1002,S_1003的记录
select * from stu where sid='S_1001' or sid='S_1002' or sid='S_1003';
select * from stu where sid in('S_1001','S_1002','S_1003');
6.5 查询学号不是S_1001,S_1002,S_1003的记录
select * from stu where not (sid='S_1001' or sid='S_1002' or sid='S_1003');
select * from stu where sid not in('S_1001','S_1002','S_1003');
6.6 查询年龄为null的记录
select * from stu where age=null;
null的特性: null不等于null 所以判断时应如下写法:
select * from stu where age is null;
6.7 查询年龄在20到40之间的学生记录
select * from stu where age >= 20 and age <= 40;
select * from stu where age between 20 and 40;
6.8查询性别非男的学生记录
select * from stu where gender!= 'male';
select * from stu where not gender='male';
select * from stu where gender not in ('male');
6.9 查询姓名不为null的学生记录
select * from stu where sname is not null;
select * from stu where not sname is null;
聚合函数是用来做纵向运算的函数:
COUNT():统计指定列不为NULL的记录行数;
MAX():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
MIN():计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
SUM():计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
AVG():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;