客户端的连接
mysql数据库管理软件:C/S
(1)服务器必须先启动
(2)客户端连接服务器端
一、连接的方式:
用命令行客户端连接服务器
mysql -hlocalhost F-P3306 -uroot-p回车
Enter password:密码
说明:
(1)如果你连接的是localhost本地的mysql,那么可以省略-hlocalhost
(2)如果你连接的mysql服务的端口号就是默认的3306,那么可以省略-P3306
(3)-h,-P,-u这三个options后面可以有空格,例如:-hlocalhost
但是-p与密码之间不要加空格,否则会认为这个空格是密码的其中一个字符
*二、*mysgl5.5版本等,安装后,有自带的一个命令行客户端 只需要输入密码 典能以root用户,并且只能连接本机的,mysql服务
三、可视化工具例如:SQLyog,Navicate…四、Java程序 JDBC的内容
Mysql数据类型
数值类型、
MySQL支持所有标准SQL数值数据类型。
这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION)。
关键字INT是INTEGER的同义词,关键字DEC是DECIMAL的同义词。
BIT数据类型保存位字段值,并且支持MyISAM、MEMORY、InnoDB和BDB表。
作为SQL标准的扩展,MySQL也支持整数类型TINYINT、MEDIUMINT和BIGINT。下面的表显示了需要的每个整数类型的存储和范围。
类型 大小 范围(有符号) 范围(无符号) 用途
TINYINT 1 byte (-128,127) (0,255) 小整数值
SMALLINT 2 bytes (-32 768,32 767) (0,65 535) 大整数值
MEDIUMINT 3 bytes (-8 388 608,8 388 607) (0,16 777 215)
大整数值
INT或INTEGER 4 bytes (-2 147 483 648,2 147 483 647) (0,4 294 967 295)
大整数值
BIGINT 8 bytes (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) (0,18 446 744 073 709 551 615)
极大整数值
FLOAT 4 bytes (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) 0,(1.175 494 351 E-38,3.402 823 466 E+38)
单精度浮点数值
DOUBLE 8 bytes (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)
双精度浮点数值
DECIMAL 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 依赖于M和D的值 依赖于M和D的值 小数值
日期和时间类型
表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。
每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。
TIMESTAMP类型有专有的自动更新特性,将在后面描述。
类型 大小
( bytes) 范围 格式 用途
DATE 3 1000-01-01/9999-12-31 YYYY-MM-DD 日期值
TIME 3 ‘-838:59:59’/‘838:59:59’ HH:MM:SS 时间值或持续时间
YEAR 1 1901/2155 YYYY 年份值
DATETIME 8 1000-01-01 00:00:00/9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 混合日期和时间值
TIMESTAMP 4 1970-01-01 00:00:00/2038
结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07 YYYYMMDD HHMMSS 混合日期和时间值,时间戳
字符串类型
字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。该节描述了这些类型如何工作以及如何在查询中使用这些类型。
类型 大小 用途
CHAR 0-255 bytes 定长字符串
VARCHAR 0-65535 bytes 变长字符串
TINYBLOB 0-255 bytes 不超过 255 个字符的二进制字符串
TINYTEXT 0-255 bytes 短文本字符串
BLOB 0-65 535 bytes 二进制形式的长文本数据
TEXT 0-65 535 bytes 长文本数据
MEDIUMBLOB 0-16 777 215 bytes 二进制形式的中等长度文本数据
MEDIUMTEXT 0-16 777 215 bytes 中等长度文本数据
LONGBLOB 0-4 294 967 295 bytes 二进制形式的极大文本数据
LONGTEXT 0-4 294 967 295 bytes 极大文本数据
注意:char(n) 和 varchar(n) 中括号中 n 代表字符的个数,并不代表字节个数,比如 CHAR(30) 就可以存储 30 个字符。
CHAR 和 VARCHAR 类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。
BINARY 和 VARBINARY 类似于 CHAR 和 VARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值值。
BLOB 是一个二进制大对象,可以容纳可变数量的数据。有 4 种 BLOB 类型:TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。它们区别在于可容纳存储范围不同。
有 4 种 TEXT 类型:TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT。对应的这 4 种 BLOB 类型,可存储的最大长度不同,可根据实际情况选择。
Mydql运算符、
算术运算符
MySQL 支持的算术运算符包括:
运算符 作用
- 加法
- 减法
- 乘法
/ 或 DIV 除法
% 或 MOD 取余
比较运算符
SELECT 语句中的条件语句经常要使用比较运算符。通过这些比较运算符,可以判断表中的哪些记录是符合条件的。比较结果为真,则返回 1,为假则返回 0,比较结果不确定则返回 NULL。
符号 描述 备注
= 等于
<>, != 不等于
大于
< 小于
<= 小于等于
= 大于等于
BETWEEN 在两值之间 >=min&&<=max
NOT BETWEEN 不在两值之间
IN 在集合中
NOT IN 不在集合中
<=> 严格比较两个NULL值是否相等 两个操作码均为NULL时,其所得值为1;而当一个操作码为NULL时,其所得值为0
LIKE 模糊匹配
REGEXP 或 RLIKE 正则式匹配
IS NULL 为空
IS NOT NULL 不为空
逻辑运算符
逻辑运算符用来判断表达式的真假。如果表达式是真,结果返回 1。如果表达式是假,结果返回 0。
运算符号 作用
NOT 或 ! 逻辑非
AND 逻辑与
OR 逻辑或
XOR 逻辑异或
位运算符
位运算符是在二进制数上进行计算的运算符。位运算会先将操作数变成二进制数,进行位运算。然后再将计算结果从二进制数变回十进制数。
运算符号 作用
& 按位与
| 按
^ 按位异或
! 取反
<< 左移
SQL语句的规范:
1、mysql对于SQL语句不区分大小写,SQL语句关键字尽量大写
show databases;
SHOW DATABASES;
至于表中的数据是否区分大小写,和字符编码,和数据类型,和校对规则有关。
ci:不区分大小写
cs:区分大小写
bin:最严格,区分大小写,以二进制值存储
2、在sql语句中的值,除了数值类型(整数、小数),其他的类型,都使用’引起来。 例如:
select * from t_employee where gender =‘男’;
3、如果在sQL中需要给字段取别名时,可以给别名加""。
如果别名中间没有空格,""可以省略,如果有空格,不能使用"↵
4、所有标点符号使用英文状态下的半角输入方式5、必须保证所有(),单引号,双引号是成对结束的I
可以使用(1)#单行注释(2)–空格单行注释(3)/多行注释/
命名规则:
数据库、表名不得超过30个字符,变量名限制为29个
必须只能包含A-Z,a-z0-9,_共63个字符
不能在对象名的字符间留空格
必须不能和用户定义的其他对象重名
必须保证你的字段没有和保留字、数据库系统或常用方法冲突
保持字段名和类型的一致性,在命名字段并为其指定数据类型的时候一定要保证一致性。假如数据类型在一个表
里是整数,那在另一个表里可就别变成字符型了
SQL语言类型:
1、DDL:Data Define Language
数据定义语言,即定义数据的结构。 例如:create, drop, alter
2、DML:Data Manage Language
数据管理语言,对数据值的增、删、改、查 例如:insert,delete, update, select
3、DCL:Data Control Language
数据控制语言,对权限、事务等的控制 例如:grant, revoke, commit, rollback等
一DDL
① 操作database的sql
对数据库的增删和使用及创建和查看所有数据库信息
② 操作表结构的sql
Ⅰ包括查看某个数数据库下的所有表结构
如果出现:mysql> show tables;
ERROR 1046 (3DO0o) : No database selected
解决方案有两种:
(1)先use,再操作表格
use数据库名;
show tables;
(2)show tables from数据名;
Ⅱ、创建某个表格
create table表名称(字段名1数据类型,字段名2数据类型,字段名3数据类型);
Ⅲ查看表结构
Desc 表格名
Ⅳ修改表名
Rename table 旧表名 to 新表名
Alter table 旧表名 rename 新表名
Ⅴ修改表结构
(1)增加一列,增加一个字段
alter table表名称add 【column】字段名数据类型;#默认添加到最后 a lter table表名称add【column】字段名数据类型first; alter table表名称add 【column】字段名数据类型after另一个字段;
例如:增加一列,存储电话号码
alter table t_stu addtel char (11);
增加一列,存储地址,添加到第一列的位置
alter table t_stu addaddress varchar(50) first;
增加一列,年龄,添加到sname的后面
alter table t_stu addage int after sname;
(2)修改,字段的数据类型或位置
alter table 表名称modify column 字段名新的数据类型; alter table表名称modify [column 字段名数据类型 first; alter table 表名称modify [ column 字段名数据类型 after另一个字段;
例如:修改gender的数据类型为char(2)
alter table t_ stu modify gender char(2) ;
(3)修改,列的名称
alter table表名称change【column】旧字段名新的字段名数据类型; 例如:修改列的名称tel为phone alter table 表名 change tel phone char (11);
(4)删除一列
alter table表名称drop【column】字段名;
例如:删除地址列
alter table 表名drop 列名
6、删除整张表
drop table表名称;
二、DML: 增删改查
1、添加数据,往表中插入数据
(1) insert into表名称values(值列表) ;
要求为所有列赋值,(值列表) 的类型、数量与表结构中列的类型、数量-致
(2) insert into 表名称(字段列表) values (值列表) ;
为(字段列表)指定的列赋值,(值列表) 的数量与(字段列表)的类型、数量对应
(3)insert into 表名称values (值列表1) , (值列表2)。。。;
(4) insert into 表名称(字段列表) values(值列表1) , (值列表2)。。。;
2、修改
update [数据库名.]表名称set字段名1 =新值,字段名2=新值,字段名3=新值。。 where【条件】;
3、删除数据
delete from表名称[where条件];
例如:删除所有数据,表结构还在
delete from t stu;
例如:删除成绩是82.5的学生
delete from t stu where score = 82.5;
4、查询数据
(1) selectfrom表名称;
select*(2)from 表名称[where条件];|
例如:查询全部
select * from t stu;
例如:查询哪些学生没有填写性别
select * from t stu where
5、查询时给字段取别名
字段名as “别名”
其中:
(1)如果"中的别名没有空格,可以省略"
(2)这个as可以省略
例如:
查询没有填写性别的学生的姓名和成绩,查询结果sname显示姓名,score显示成绩 select sname as “姓名” ,score as成绩" from t_stu where gender is null; select sname姓名,score成绩from t_stu where gender is null; **
关系型数据库设计规则
**
。遵循ER模型和三范式
oEentity代表实体的意思对应到数据库当中的一张表
oR relationship代表关系的意思
,三范式:1、列不能拆分2、唯一标识3、关系引用主键
,具体体现
。将数据放到表中,表再放到库中。
。一个数据库中可以有多个表,每个表都有一个名字,用来标识自己。表名具有唯一性。
o表具有一些特性,这些特性定义了数据在表中如何存储,类似java和python中“类”的设计。
。表由列组成,我们也称为字段。每个字段描述了它所含有的数据的意义,数据表的设计实际上就是对字段 的设计。创建数据表时,为每个字段分配一个数据类型,定义它们的数据长度和字段名。每个字段类似 java或者python中的"实例属性”。
。表中的数据是按行存储的,一行即为一条记录。每一行类似于java或python中的"对象"。
1、数据完整件LData Integrity)
是指数据的精确性(Accuracy)和可靠性(Reliability)。它是应5止数据库中 存在不符合语义规定的数据和防止因错误信息的输入输出造成无效操作或错误信息而提出的。
数据的完整性要从以下四个方面考虑:
,实体完整性(Entity Integrity):例如,同一个表中,不能存在两条完全相同无法区分的记录
。域完整性(Domain Integrity):例如:年龄范围0-120,性别范围"男/女”
。引用完整性(Referential Integrity):例如:员工所在部门,在部门表中要能找到这个部门
,用户自定义完整性(User-defined Integrity):例如:用户名唯一、密码不能为空等,本部门经理的工资不 得高于本部门职工的平均工资的5倍。
2、根据约束的特点,分为几种:
●主键约束:主键约束
外键约束
唯一键约束
Not NULL约束:非空约束
Check约束:检查约束
Default约束:默认值约束
自增约束
3、约束(CONSTRAINTS)与索引(INDEX)
约束是用来对数据业务规则和数据完整性进行实施、维护。约束的作用范围仅限在当前数据库,约束可以被当做数 据库对象来处理,它们具有名称和关联模式。
索引是一个单独、物理的存储在数据页上的数据库结构,它是表中一列或若干列值的集合和相应的指向表中数据值的物理标识数据页的逻辑指针清单(类似于新华字典的目录索引页)。索引的存在会增加数据库的存储空间,也会使插入、修改数据的时间开销变多(因为插入和修改数据时,索引也要随之变动) , 但是可以大大提高查询速度。
因此应该在键列、或其他经常要查询、排序、按范围查找的列上建立索引,而对于在查询中很少使用和参考的列、
修改非常频繁的列。值很少的列(例如性别只有男和女)等列上不应该创建索引。Mysq|会在主键、唯一键、 外键列上自动创建索引,其他列需要建立索引的话,需要手动创建。其中主键删除.对应的索引也会删除删除唯-键的方式是通过删除对应的索引来实现的删除外键,外键列上的索引还在,如果需要删除,需要单独删除索引。
Mysq|会在主键、唯一键、 外键列.上自动创建索引,其他列需要建立索引的话,需要手动创建。
其中主键删除,对应的索引也会删除
删除唯一键的方式是通过删除对应的索引来实现的
删除外键,外键列上的索引还在,如果需要删除,需要单独删除索引
1、主键约束
特点:
(1)一个表有且只能有一个主键约束.
(2)主键约束意味着,唯一并且非空
(3)主键约束名PRIMARY
(4)创建主键会自动创建对应的索引,同样删除主键对应的索引也会删除
2、在建表的时候如何指定主键约束
create table[数据库名.]表名称( 字段名1数据类型primary key, 字段名2数据类型 。。。 ),
3、建表后如何指定主键约束
alter table [ 数据库名.]表名称add primary key (字段列表) ;
4、主键约束分为两种:
(1)单列主键约束
(2)复合主健约束
创建表时
icreate table【数据库名.】表名称( 字段名1数据类型, 字段名2数据类型, 。。 o o, primary key(字段列表) ) ;
建表后如何指定复合主键约束:
alter table【数据库名.】表名称add primary key(字段列表);
5、删除主键约束
alter table[数据库名.]表名称drop primary key;
2、唯一键约束
特点:
(1)一个表可以有多个唯一键约束
(2)唯一键约束意味着,唯一,可以为NULL
(3)唯一键的约束名可以自己指定,也可以默认,
如果默认的话,一般如果单列唯一,默认就是列名,
如果是多列组合唯一,那么默认是该组合第1列的名称。
(4)创建唯一键约束,也会在对应列上建立索引。
而且删除唯一键约束的方式是通过删除对应索引来实现的。
2、唯一键约束也是分为两种
(1) 单列的唯一一键
(2)多列组合的唯一键
3、建表时如何指定唯一键
create table[数据库名.]表名称( 字段名1数据类型primary key 字段名2数据类型unique key,#只适用于单列的唯一键 ); create table[数据库名.]表名称( 字段名1数据类型primary key, 字段名2数据类型 。 );
4、建表后如何指定唯一键约束
alter table [数据库名.]表名称add unique key(字 段列表) ;
5、删除唯一 键约束
alter table [ 数据库名.]表名称drop index 索引名;
6、如何查看某个表格的索引名
show index from[ 数据库名.] 表名称;
3、非空约束
特点:
(1)一个表可以有很多的非空约束
(2)非空约束只能针对某一个字段来说
(3)非空约束意味着,改字段不能存入null值
2、如何在建表时指定非空约束呢
create table [数据库名.]表名称( 字段名1数据类型 primary key, 字段名2数据类型unique key]not null , 字段名3数据类型 not null, 。。);
3、建表后如何指定某个字段非空呢?
alter table【数据库名.】表名称modify字段名数据类型not null; create table test.t_stu ( sid int primary key, sname varchar (20), gender char ) ; alter table t_stu modify sname varchar (20) not null;
4、建表后,取消某个字段的非空约束
alter table【数据库名.】表名称modify字段名数据类型; alter table t_stu modify sname varchar(20);
4、默认值约束
1、特点:
(1)一个表可以有很多的默认值约束
(2)默认值约束只能针对某一个字段来说
(3)默认值约束意味着,该字段如果没有手动赋值,会按默认值处理
2、如何在建表时指定默认值约束?
create table[数据库名.]表名称( 字段名1数据类型primary key, 字段名2数据类型(unique key] [not null]default默认值, 字段名3数据类型default默认值, oooc );
例如:
); create table test.t_stu( sid int primary key, sname varchar (20) not null工 gender char default’男’ insert into t stu values(1, 张三’) ; ERROR 1136 (21S01) : Column count doesn’t match value count at row 1 '列数与值不对应 insert into t stu values(1, ‘张三’ ,default) ; insert into t_ stu (sid, sname) values(2, ‘李四’) ;
3、建表后如何指定某个字段有默认值呢?
alter table[数据库名.]表名称modify字段名数据类型default 默认值;
4、 如何取消某个字段的默认值约束
al ter table [数据库名.]表名称modify字段名数据类型[not null ] #不写默认
5、自增约束
特点:
(1)一个表只能有一个自增约束
因为一个表只有一个维护自增值的变量。
(2)自增约束的列只能是整数列
(3)自增约束的列必须是键列(主键,唯一键,外键),
实际中一般是主键自增最多
2、如何在建表时指定某个列自增
create table t stu(sid int auto increment, sname varchar(20) ); ERROR 1075 (42000):Incorrect table definition; there can be only one auto column and it must be defined as a key as
3、建表后增加自增
alter table[数据库名.] 表名称modify 字段名数据类型auto_ increment ;
4、如何取消自增
alter table[数据库名.]表名称modify字段名数据类型; 外键约束:
2、外键约束
(1) Cascade方式:级联
主动权在主表上。
如果主表被依赖字段修改了,从表对应的外键字段跟着修改
(2)如果主表被依赖字段的记录删除了,从表对应的外键字段的记录也会删除 Set null方式
主动权在主表上。
如果主表被依赖字段修改了,从表对应的外键字段设置为null
如果主表被依赖字段的记录删除了,从表对应的外键字段的值设置为null
(3)这里要求,外键字段必须不能有非空约束。
No action方式:不作为
(4) Restrict方式:严格
(3)(4),如果主表的被依赖字段的值被引用了,那么主表对该字段的修改和删除就
(3)(4)主表没有主动权。必须先处理从表对应的值,然后才能修改和删除。
3、如何在建表时指定外键
create table【数据库名.】从表名称( 字段名1 xxIntprimary key auto_increment, 字段名2数据类型【unique_key)【not null】default默认值, 字段名3数据类型default默认值,
) ; foreign key(从表的某字段)references主表名(被参考字段)【on update等级】【on delete等级】
4、建表后如何添加外键
Alter table [数据库名.]从表名称add foreign key (从表的某字段) references 主表名【主表被引用的字段】
5、如何删除外键
alter table .[数据库名.]从表名称drop foreign key约束名; .
6、如何查看某个表的外键约束名
SELECT * FROM information_ schema. table_ constraints WHERE table_ name = ‘表名称’