SQL数据库查询语言(1)
目录
MySQL数据库
MySQL安装与配置
注意使用root权限进行安装:
apt-get install mysql-server mysql-client
apt-get install libmysqlclient-dev
ubuntu命令行登录mysql,验证是否成功:
mysql -u root -p
输入密码,如果出现以下提示证明没有问题
mysql>
DDL数据定义语言
DDL:Data Definition Language
作用:用于描述数据库中要存储的现实世界实体的语言。即创建数据库和表的结构。
常用关键字:
CREATE 创建表
ALTER 修改表中对应的列
DROP 删除表
TRUNCATE 删除表中所有内容
- SQL语言不区分大小写
创建数据库
示例:
create database test; //创建名为test的DB
create table Person1(personID int NOT NULL AUTO_INCREMENT,PRIMARY KEY(personID),FirstName varchar(15),LastName varchar(15),Age int);
//创建表
NOT NULL表示该列值不能为空,AUTO_INCREMENT表示自动增长,PRIMARY KEY表示主键。
查看、删除数据库
修改、备份、恢复数据库
创建表
- 注意:创建表时,要根据需保存的数据创建相应的列,并根据数据的类型定义相应的列类型。建表至少需要
给出表中的一列信息,否则会报错。
例:user对象
id int
name string
password string
birthday date
Id | Name | Password | birthday |
---|---|---|---|
修改表
使用 ALTER TABLE 语句 追加, 修改, 或删除列的语法.
修改表的名称:Rename table 表名 to 新表名
修改表的字符集:alter table student character set utf8;
示例:
alter table persons add addr varchar(15);
alter table persons change addr addr1 varchar(15);
alter table Person drop addr_wd;
MySQL常用数据类型
分类 | 数据类型 | 说明 |
---|---|---|
数值类型 | BIT(M) BOOL,BOOLEAN TINYINT [UNSIGNED] [ZEROFILL] SMALLINT [UNSIGNED] [ZEROFILL] INT [UNSIGNED] [ZEROFILL] BIGINT [UNSIGNED] [ZEROFILL] FLOAT[(M,D)] [UNSIGNED] [ZEROFILL] DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL] | 位类型。M指定位数,默认值1,范围1-64 使用0或1表示假或真 带符号的范围是-128到127。无符号0到255。 2的16次方 2的32次方 2的64次方 M指定显示长度,d指定小数位数 (5, 2) 表示比float精度更大的小数 |
文本、二进制类型 | CHAR(size) VARCHAR(size) BLOB LONGBLOB TEXT(clob) LONGTEXT(longclob) | 固定长度字符串(size表示 有多少个字符) 可变长度字符串 (varchar 是可变的) varchar(50)表示最大可以存放的长度是50 二进制数据 大文本 |
时间日期 | DATE/DATETIME/TimeStamp | 日期类型(YYYY-MM-DD) (YYYY-MM-DD HH:MM:SS),TimeStamp表示时间戳,它可用于自动记录insert、update操作的时间 |
lVARCHAR、BLOB和TEXT类是变长类型。每个类型的存储需求取决于列值的实际长度。
DML数据操纵语言
DML:Data Manipulation Language
作用:用于向数据库表中插入、删除、修改数据。
常用关键字:
INSERT UPDATE DELETE
Insert语句
- 使用 INSERT 语句向表中插入数据。
插入的数据应与字段的数据类型相同。
数据的大小应在列的规定范围内,例如:不能将一个长度为80的字符串加入到长度为40的列中。
在values中列出的数据 。
字符和日期型数据应包含在单引号中。
插入空值,不指定或insert into table value(null)
mysql中文乱码
•mysql有六处使用了字符集,分别为:client 、connection、database、results、server 、system。
•client是客户端使用的字符集。
•connection是连接数据库的字符集设置类型,如果程序没有指明连接数据库使用的字符集类型就按照服务器端默认的字符集设置。
•database是数据库服务器中某个库使用的字符集设定,如果建库时没有指明,将使用服务器安装时指定的字符集设置。
•results是数据库给客户端返回时使用的字符集设定,如果没有指明,使用服务器默认的字符集。
•server是服务器安装时指定的默认字符集设定。
•system是数据库系统使用的字符集设定。
注意插入数据时的中文问题:
show variables like 'character%';
如果插入中文时,要调整编码为GBK
show variables like 'character%';
修改客户端工具所用的编码
set character_set_client=gbk;
客户端显示结果的编码
set character_set_results=gbk;
Update语句
- 使用 update语句修改表中数据。
UPDATE语法可以用新值更新原有表行中的各列。
SET子句指示要修改哪些列和要给予哪些值。
WHERE子句指定应更新哪些行。如没有WHERE子句,则更新所有的行。
示例:
Delete语句
如果不使用where子句,将删除表中所有数据。
Delete语句不能删除某一列的值(可使用update)
使用delete语句仅删除记录,不删除表本身。如要删除表,使用drop table语句。
同insert和update一样,从一个表中删除记录将引起其它表的参照完整性问题,在修改数据库数据时,头脑中应该始终不要忘记这个潜在的问题。
DQL数据查询语言
DQL:Data Query Language
作用:查询数据。
常用关键字:
SELECT
Select语句
基本select语句
Select 指定查询哪些列的数据。
column指定列名。
*号代表查询所有列。
From指定查询哪张表。
DISTINCT可选,指显示结果时,是否剔除重复数据
在select语句中可使用表达式对查询的列进行运算
在select语句中可使用as语句
在where子句中经常使用的运算符
比较运算符 | > < <= >= = <> | 大于、小于、大于(小于)等于、不等于 |
---|---|---|
BETWEEN ...AND... | 显示在某一区间的值(含头含尾) | |
IN(set) | 显示在in列表中的值,例:in(100,200) | |
LIKE ‘张pattern’ | 模糊查询 | |
IS NULL | 判断是否为空 | |
逻辑运算符 | and | 多个条件同时成立 |
or | 多个条件任一成立 | |
not | 不成立,例:where not(salary>100); |
Like语句中,% 代表零个或多个任意字符,_ 代表一个字符,例first_name,like ‘_a%’;
用where筛选出age大于30的成员:
使用order by 子句排序查询结果。
Order by 指定排序的列,排序的列即可是表中的列名,也可以是select 语句后指定的列名。
Asc 升序、Desc 降序
ORDER BY 子句应位于SELECT语句的结尾。
数据的完整性
数据完整性是为了保证插入到数据库中的数据是正确的,它防止了用户可能的输入错误。
数据完整性主要分为以下三类:
- 实体完整性:
规定表的一行(即每一条记录)在表中是唯一的实体。实体完整性通过表的主键来实现。
- 域完整性:
指数据库表的列(即字段)必须符合某种特定的数据类型或约束。比如NOT NULL。
- 参照完整性:
保证一个表的外键和另一个表的主键对应。
数据库主键
主键:表中经常有一个列或列的组合,其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键,通过它可强制表的实体完整性。
当创建或更改表时可通过定义 PRIMARY KEY 约束来创建主键。一个表只能有一个 PRIMARY KEY 约束,而且 PRIMARY KEY 约束中的列不能接受空值。由于 PRIMARY KEY 约束确保唯一数据,所以经常用来定义标识列。 作用 :
1)保证实体的完整性;
2)加快数据库的操作速度,主键默认建立索引
3) 在表中添加新记录时,会自动检查新记录的主键值,不允许该值与其他记录的主键值重复。
4) 自动按主键值的顺序显示表中的记录。如果没有定义主键,则按输入记录的顺序显示表中的记录。
定义表的约束
- 定义主键约束
- primary key:不允许为空,不允许重复 (可以区分两条记录的唯一性)
- 删除主键:alter table tablename drop primary key;
- 定义主键自动增长
- auto_increment
- 定义唯一约束
- unique
- 定义非空约束
- not null
- 定义外键约束
- constraint ordersid_FK foreign key(ordersid) references orders(id);
示例:
create table pats(patID int NOT NULL AUTO_INCREMENT,PRIMARY KEY(patID),person1ID int
default NULL,patName varchar(15) default NULL,FOREIGN KEY (person1ID) REFERENCES persons(personID));
多表设计
避免数据的冗余
一对多
Create table province (
id int primary key,
province varchar(9) not null
)
insert into province values(1,'shandong');
Create table students(
id int primary key,
name varchar(5) not null,
province_id int not null
)
Alter table students add constraint FK_student_Provinced foreign key (province_id) references province(id);
alter table employee add constraint FK_employee_departmentid foreign key (departmentid) references department(id);
多对多
create table TEACHER(
ID int primary key,
NAME varchar(100)
);
insert into teacher values(1,'math teacher');
insert into teacher values(2,'chinese teacher');
insert into teacher values(3,'english teacher');
create table STUDENT3(
ID int primary key,
NAME varchar(100)
);
insert into student3 values(1,'lily');
insert into student3 values(2,'lucy');
insert into student3 values(3,'lilei');
insert into student3 values(4,'lilyzhou');
insert into TEACHER_STUDENT(1,1);
create table TEACHER_STUDENT(
T_ID int,
S_ID int,
primary key(T_ID,S_ID),
constraint T_ID_FK foreign key(T_ID) references TEACHER(ID),
constraint S_ID_FK foreign key(S_ID) references STUDENT3(ID)
);
一对一
方法1:外键关联+唯一
create table PERSON(
ID int primary key,
NAME varchar(100)
);
create table computer(
ID int primary key,
brand varchar(20),
PERSON_ID int unique,
constraint PERSON_ID_FK foreign key(PERSON_ID) references PERSON(ID)
);
方法2:主键关联
constraint PERSON_ID_FK foreign key(ID) references PERSON(ID)
SQL数据库查询语言(1)的更多相关文章
- Sql数据库查询语言
1.概述 Sql是一种面向数据库的结构化查询语言.是符合美国国家标准化组织ANSI的一种计算机标准语言. Sql具对数据库的操作有:增删改查.创建数据库.创建表.创建存储过程.创建视图等 RDBMS关 ...
- 关系型数据库查询语言 SQL 和图数据库查询语言 nGQL 对比
摘要:这篇文章将介绍图数据库 Nebula Graph 的查询语言 nGQL 和 SQL 的区别. 本文首发于 Nebula Graph 官方博客:https://nebula-graph.com.c ...
- SQL数据库
SQL是Structured Query Language(结构化查询语言)的缩写.SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言.在使用它时,只需要发出“做什么”的命令,“怎么做” ...
- SQL数据库基础知识-巩固篇<一>
SQL数据库基础知识-巩固篇<一>... =============== 首先展示两款我个人很喜欢的数据库-专用于平时个人SQL技术的练习<特点:体积小,好安装和好卸载,功能完全够用 ...
- SQL数据库学习,常用语句查询大全
数据库学习 sql server数据库基本概念 使用文件保存数据存在几个缺点: 1.文件的安全性问题: 2.文件不利于查询和对数据的管理: 3.文件不利于存放海量数据 4.文件在程序中控制不方便. 数 ...
- 一文了解各大图数据库查询语言(Gremlin vs Cypher vs nGQL)| 操作入门篇
文章的开头我们先来看下什么是图数据库,根据维基百科的定义:图数据库是使用图结构进行语义查询的数据库,它使用节点.边和属性来表示和存储数据. 虽然和关系型数据库存储的结构不同(关系型数据库为表结构,图数 ...
- KTV项目 SQL数据库的应用 结合C#应用窗体
五道口北大青鸟校区 KTV项目 指导老师:袁玉明 歌曲播放原理 SQL数据库关系图 C#解决方案类图 第一步:创建数据库连接方法和打开方法和关闭方法! public class DBHelper { ...
- jquery autocomplete实现读取sql数据库自动补全TextBox
转自我本良人 原文 jquery autocomplete实现读取sql数据库自动补全TextBox 项目需要这样子一个功能,其他部门提的意见,只好去实现了哦,搞了好久才弄出来,分享一下. 1.前台页 ...
- 基于Qt5.5.0的sql数据库、SDK_tts文本语音朗读的CET四六级单词背诵系统软件的编写V1.0
作者:小波 QQ:463431476 请关注我的博客园:http://www.cnblogs.com/xiaobo-Linux/ 我的第二款软件:CET四六级单词背诵软件.基于QT5.5.0.sql数 ...
随机推荐
- java mutilThread
可以参考https://www.cnblogs.com/wxd0108/p/5479442.html 这里补充一下我理解多线程这部分的一些要点. 1.首先是java的monitor概念:https:/ ...
- 关系数据库SQL复习
1.1 SQL的概述 SQL(Structured Query Language)结构化查询语言,是关系数据库的标准语言 SQL是一个通用的.功能极强的关系数据库语言 1.2 SQL的特点 1. 综合 ...
- Java面向对象-递归
Java面向对象-递归 递归,就是程序调用自身,我们讲的是方法递归调用,也就是在方法里自己调用自己: 我们给出一个案例,求阶乘 1*2*3*...*(n-1)*n 我们用非递归和递归方式分别实现下, ...
- 安卓Animation类与xml制作动画
有时要对控件添加一点动画效果,在安卓中,动画效果也是一个类,也就是Animation类.把动画效果这个类弄好后,在与控件类关联到一起,就可以实现控件有一些动作特效这样的效果了.动画效果的定义,要在xm ...
- Eclipse导入tomcat服务器
创建server
- servlet01 项目demo、servlet生命周期
1 环境说明 jdk: 1.8 tomcat: 8.0 2 项目demo 2.1 新建一个动态的web项目 2.2 新建一个servlet类 该类必须继承 HttpServlet 技巧01:Htt ...
- sql去除重复记录 且保留id最小的 没用
第一步:查询重复记录 SELECT * FROM TableName WHERE RepeatFiled IN ( SELECT RepeatFiled FROM TableName ...
- 在Linux中监视IO性能
dd命令 iostat命令 理解iostat的各项输出 iostat的应用实例 附:在Windows中监视IO性能 延伸阅读 dd命令 dd其实是工作于比较低层的一个数据拷贝和转换的*nix平台的工具 ...
- 10.LIKE 操作符
LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式. LIKE 操作符 LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式. SQL LIKE 操作符语法 SELECT colum ...
- 解决IE与FF 中 input focus 光标移动在最后的方案
只要把input元素的id传进来即可 function moveCursor(id) { var id = document.getElementById(id); id.focus(); var ...