Oracel 甲骨文公司 SQLSever 微软公司 DB2 IBM公司 MySQL(sun公司,现在是甲骨文)开源的
数据:客观事物的符号表示,包括数值型(1、2、3...)和多媒体(非数值)数据(语音、图片、视频等)。
数据库:长期存储在计算机内的有组织的、可共享的相关数据的集合。
数据库管理系统:维护管理数据集合的软件系统。
数据管理技术:对数据的收集、整理、组织、存储、维护、检索、传送等操作,基本目的就是从大量的,杂乱无章的,难以理解的数据中筛选出有意义的数据。
数据库系统:数据库系统(DBS)通常是指带有数据库的计算机应用系统。包括数据库、相应的硬件、软件和各类人员。
数据库表(关系),字段,记录:
关系数据库:二维表存储数据。
字段:实体的属性;
记录:一条记录表示一个实体。
表 : 一个关系数据库就是由二维表和他们之间的关系组成. 二维表在数据库中就叫表.
字段(Field): 对应于属性的数据称为字段,也称为数据项。字段的命名往往和属性名相同。
如学生有学号、姓名、年龄、性别、系等字段。
记录(Record): 对应于每个实体的数据称为记录。
如一个学生(990001,张立,20,男,计算机)为一个记录。
2.主键
一个特殊的字段,在整个表中不能重复,不能为空.如学生表中学生编号字段都可设为主键.
3.组合键
学生表,课程表,成绩表(学生编号,课程编号)
3.外键
一张表中包含另一张表的主键,这样的字段在本表中叫外键,它是联系另外表的纽带.
4.表关系
一对一联系(1:1)
实体集A中的一个实体至多与实体集B中的一个实体相对应,反之亦然。
如:班级与班长,观众与座位,病人与床位
一对多联系(1:n)
实体集A中的一个实体与实体集B中的多个实体相对应,而B中的一个实体至多与A中的一个实体相对应.
如:班级与学生、公司与职员、省与市
多对多(m:n)
实体集A中的一个实体与实体集B中的多个实体相对应,反之亦然.
如:教师与学生,学生与课程,工厂与产品
MySQL命令:
show databases: 显示数据库; use student:使用student数据库 ; show tables:显示表。
select * from student order by number desc(降序)/asc(升序)。如果是汉字字符串 升降序按汉字(词),第一个汉字首字母升降。
select * from student where number between 1002 and 1004; 查询1002至1004之间(包括1002和1004)。
insert into student (id,name,number) values (6,'张三',1001); 插入(添加)一个名为张三的学生属性。
update student set name = '李四' ,where name = '张三'; 把张三改为李四。
delete from student where name = '李四'; 把李四属性删除。
WHERE 子句
如需有条件地从表中选取数据,可将WHERE 子句添加到 SELECT 语句。
语法:
SELECT 列名称 FROM 表名称 WHERE 列运算符 值
下面的运算符可在WHERE 子句中使用:
操作符 描述
= :等于
<> :不等于
> :大于
< “小于
>=: 大于等于
<= :小于等于
BETWEEN :在某个范围内
LIKE :搜索某种模式
注释:在某些版本的SQL 中,操作符 <>可以写为 !=。
AND 和 OR 运算符用于基于一个以上的条件对记录进行过滤。
AND 和 OR 运算符
AND 和 OR 可在 WHERE 子语句中把两个或多个条件结合起来。
如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。
如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录。
SELECT * FROM Persons WHERE FirstName=’Thomas’ AND LastName=’Carter’
SELECT * FROM Persons WHERE firstname=’Thomas’ OR lastname=’Carter’
SELECT * FROM Persons WHERE (FirstName=’Thomas’ OR FirstName=’William’) AND LastName=’Carter’
create database student default charset gbk; 指定服务器默认编码集为GBK模式。
在mysql数据库表中插入中文汉字时,会出现乱码或者报错。解决办法如:
show variables like 'character%'; 显示查看当前数据库的相关编码集。
可以看到数据库的编码格式为utf8模式,编码不一致导致了乱码产生。而当前 CMD 客户端的编码格式无法修改,所以只能修改 connection、 client、results 的编码集来告知服务器端当前插入的数据采用 GBK 编码,而服务器的数据库虽然是采用 UTF-8 编码,但却可以识别通知服务器端的 GBK 编码数据并将其自动转换为 UTF-8 进行存储。可以通过set names GBK(随控制台的关闭而而失效);来快速设置与客户端相关的编码集:而我们汉字应该为gbk。
如果要永久生效可以找到MySQL安装路径(默认为:c://progames files/MySQL),找到my.ini配置文件,在这个配置文件中 [mysql] 与客户端配置相关,[mysqld] 与服务器配置相关。它的默认配置为:
[mysql]
default-character-set=utf8
[mysqld]
character-set-server=utf8
可将default-character-set=utf8改为:default-character-set=gbk;重启MySQL 服务一劳永逸解决乱码问题。
从上图中可以看到 MySQL 有六处使用了字符集,分别为:client 、connection、database、results、server 、system。其中与服务器端相关:database、server、system(永远无法修改,就是utf-8);与客户端相关:connection、client、results 。
client 为客户端使用的字符集。
connection 为连接数据库的字符集设置类型,如果程序没有指明连接数据库使用的字符集类型则按照服务器端默认的字符集设置。
database 为数据库服务器中某个库使用的字符集设定,如果建库时没有指明,将使用服务器安装时指定的字符集设置。
results 为数据库给客户端返回时使用的字符集设定,如果没有指明,使用服务器默认的字符集。
server 为服务器安装时指定的默认字符集设定。
system 为数据库系统使用的字符集设定。
SQL语句练习1
1.创建名为"db1606"的数据库,
2.创建表名为"course"的课程表,包含字段有:课程ID(id)、课程编号(number)、课程名称(course_name)、课程描述(course_discription) 课
时(course_time)
要求:课程ID、课程名称和课时不能为空,课程ID设为主键
3.向课程表中添加3门课程如下:
课程ID 课程编号(number) 课程名称(course_name) 课程描述(course_discription) 课时(course_time)
1 1001 java java服务端开发 189
2 1002 android android手机开发 200
3 1003 ui 用户界面设计 198
4. 1>查询课程表中所有课程按编号降序排列
2>查询课程表中课时在100到190之间的课程
3>查询课程名包含"roid"的课程
5.修改课程名为android的课程课时改为240,课程名改为IOS
6.删除课程描述包含"设计"的课程
解:1.create database db1606;
2.use db1606;
create table course(id int not null primary key,number int,course_name varcher(10) not null,course_discription varcher
(50),course_time int not null);
3.insert into course (id,number,course_name,course_discription,course_time) values (1,1001,'java',' java服务端开发',189);
insert into course (id,number,course_name,course_discription,course_time) values (2,1002,'andriod','android手机开发',200);
insert into course (id,number,course_name,course_discription,course_time) values (3,1003,'ui','用户界面',198);
4.select * from course order by id desc;
select * from course where course_time between 100 and 190;
select * from course where course_name like '%riod%';
5.update course set course_name = 'ios',course_time = 240,where id = 2;
6.delete from course where course_discription like '%设计%';
添加mysql用户
GRANT all privileges ON *.* TO 'test '@'localhost' IDENTIFIED BY '123456' WITH GRANT OPTION;
注释:
all privileges:所有权限
select detele update create drop等:其他权限
第一个*:表示所有数据库
第二个*:表示所有表
一、SQL语句
1.创建数据库mydb
create database mydb;
create database mydb default charset utf8;
2.创建课程表 course
create table course (
id int(11) not null auto_increment pramery key(id),
course_name varchar(10) not null,
course_number int(10) not null,
course_description varchar(255),
course_time int(10) default 100
)
create table course (
id int(11) not null auto_increment primary key,
course_name varchar(10) not null,
course_number int(10) not null ,
course_description varchar(255),
course_time int(10) default 100,
check (course_number > 100)
)
3.添加一个课程
insert into course (course_name,course_number,course_description)values
('java',1001,'java软件开发课程学习',100);
insert into course (course_name,course_number,course_description)values
('android',1002,'android软件开发课程学习'230);
insert into course (course_name,course_number,course_description)values
('ui',1003,'ui设计课程学习'150);
4.修改课时为200
update course set course_time = 200 where course_name = 'java';
5.查询课时在90到200之间的课程按id降序排序
select * from course where course_time between 90 and 200 order by id desc;
6.查询课程描述中包含"开发"的所有课程
select * from course where course_description like '%开发%';
7.查询课程编号是1001和1003的课程
select * from course where course_number = 1001 or course_number=1003 or course_number = 1004;
select * from course as c where c.course_number in (1001,1003,1005,1004);
select * from course as c,student as s where c.number = 1001 or s.number = 2001;别名