客户端连接到mySQl 服务器
c/xampp/mysql/bin/my sql.exe shell 命令解读器
mysql.exe h127.0.0.1 –uroot -p(密码) -P3306 (端口号)
命令 show databases; 所有命令必须要以分号结束 表示显示数据库中当前已有的所有数据 断开命令 quit;
用户名错误可以登录 但不能操作 access访问 分号是连接服务器之后命令
Win下.exe 可以省略掉 端口号默认3306 没密码可以不写-p 不写用户名
最简形式 mysql –uroot 登录服务器时用,
Mysql服务器中数据的逻辑结构
一个大服务器有多个数据库 在一个服务器上可能包含多个database(库)包含多个表(table)row(行)column(列)
Server=>Database=> TABLE=>ROW=>COLUMN
(1) 连到数据库服务器上
(2) 查看,新建,丢弃数据库
(3) 进入某个数据库查看,新建,丢弃数据表
(4) 向表中添加一行数据
Show databases 显示已有数据 quit退出连接
进入库 use 数据库名;开始进入/使用指定数据库 show tables 显示所有表
Mysql 20 use和quit可以不写;分号
查看表头: desc(ribe)表名 描述指定表中有哪些列
SQL语句 structed query language 结构化查询语言 70年代IBM提供 提供给ISO 国际标准化组织 ,成为数据库行业的标准语言 SQL语言两种运行方式:1.交互式执行:输入一行语句,执行一句……. 适用于临时性查看数据
2.脚本式执行,把要执行的多条命令编写在文本文件中,一次性的全部提交给服务器执行,适合批量增删改数据
路径不能有中文空格
Mysql –uroot <导入+路径 全路径 必须在windows下执行 mysql –uroot 只适合于更删改数据 不适用于查看 , 分号要用英文!
SQL语言不区分大小写 SQl关键字纯大写 非关键字用纯小写
一条语句可以编写在多条中 但最后必须有英文分号 代码前加#表示注释服务器不予执行,取消注释执行,/*多行注释*/ 期间内容都不执行
新建一个数据库 create database 数据库名字;表示创建一个新的是数据库
丢弃数据库drop database IF EXIST数据库名 exit退出 exist存在
Creat table 创建表 # user:编号ID username score积分 is_online或isOnline 表,列 列和列之间用逗号分隔 create table表名(列名,。。。。。)
CREATE TABLE user(
uID INT,列后加空格 用户编码都是数字
uname VARCHAR(9), VARIABLE CHARTER可变长度字符串 括号内表示字符数小于9,不到9也行
score INT,
isOnline Varchar); 指定某一列必须指定其数据类型
#丢弃执行数据库如果在的化
DROP DATABASE IF EXISTS jdmall ;
#创建数据库
CREATE DATABASE jdmall ;
#进入指定数据库
USE jdmall;
#创建信息表
CREATE TABLE user(
uid INT, #用户标号都是“数字”
uname VARCHAR(9), #用户名可变长度的字符串
score INT, #积分都是数字
isOnline VARCHAR(1) #
);
INSERT into 表名 values(值,值,)向指定表中插入一行数据
INSERT INTO user values(‘TOM ‘,’100 ‘,’ y‘);
SELECT * from 查看 form表单 *号左右要有空格
不要在脚本模式下查询语句 DELETE FROM USER删除所有行
Delete from 表名where满足条件 ; delete form where uid‘20’
Update表名set设置 列=值,列=值…;更新所有行
Update 表名 where条件 ;
修改满足条件的数据行 update user where uname=’tom’
关闭数据库,网页只有进度条无商品
Mysql给网页提供数据
网状 树形 关系 非关系
Mysql 服务器 存储管理数据 每一个数据库即为文件夹 客户端:向服务器发送命令 包括增删改查
逻辑结构
Drop table if exists 表名 丢弃表 delete from 删除表内容 表头存在
Selece * from 表名
如何获取刚刚执行insert 产生的编号#获取insert 产生的编号
$uid=mysqli_insert_id($conn);
echo$uid;只用于inser之后
图片本质是路径
数据库中的乱码问题 ----了解行业知识 1.中文乱码问题
计算机如何保存字符 encode编码AABbCc=>656566986799 数字-----字符串的过程叫解码decode
常用的字符编码方案 :
(1)ASCII美国电报电信交换码 对英语中常用的字符及标点符号都进行编码
共128个
(2)GB2312 中国编码 国标扩展 30000多字符 对中国大陆常用的简体字符及标点符号进行编码
(3)BIG5 码 20000+ 繁体汉子和标点进行编码 台湾编码
(4) latin1 256个 西欧 能兼容ASCII
乱码产生根源 字符串编码和解码时所用的方案不同
(5)UBicode 字符集 6万+ 对世界上主流语言字符进行了编码
不兼容任何国家编号 只兼容ASCII码 在存储时 转换格式如UTF-8用的最多 ,UTF-16,UTF-32等 网页文件夹名及网名都不能有中文 x.SQL 第一处保证文件是utf-8 文件另存为
文件开头
设置客户端连接服务器并传输sql语句所用的字符编码
SET NAMES UTF8;
数据库服务器中
3.create database jdmall charset=utf8;
必须要三处统一
2.MYSQL中的列类型
CREATE TABLE表名(列名)
提供了比其他数据库更丰富列类型
具体可以参考‘使用手册’
列类型 三大类:1.数值类型 : INT整数4字节32bit位-2147483648----2147483647
SAMLLINT:小整数-32768---32767 TINYINT微整数 (-128-127)
BIGINT 大整数 一个bit存8位 两个字节 922亿
2.日期时间类型
3.字符串类型
关于二进制的存储问题:比特位 bit位 只能存储1个0或1 byte字节=8个bit位 最小-128 最大127 叫微整数 11111111
MySQL支持所有标准SQL数值数据类型。这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION)。关键字INT是INTEGER的同义词,关键字DEC是DECIMAL的同义词。
BIT数据类型保存位字段值,并且支持MyISAM、MEMORY、InnoDB和BDB表。
作为SQL标准的扩展,MySQL也支持整数类型TINYINT、MEDIUMINT和BIGINT。下面的表显示了需要的每个整数类型的存储和范围。
浮点小数概念: 1234.5678=123.45678*10^1=123.45678E1
12345.678*10^1=123.454678E-1 小数点左右移动数值大小相等 所有小数均在计算机中用浮点小数表示 即科学计数法,占用4个字节
非整数 小数类型 FLOAT单精度浮点小数 只要浮动就会导致四舍五入精度丢失
DOUBLE双精度浮点小数 1个字节 占8个字节 一部分做指数位 精度为远少于int 表示范围远大于INT
DECIMAL(M,D)m表示精度丢失文体 dcimal(7,2)
M表示总位数 ,d表示有效位数
699.5 decimal (4,1) 精确存储
Bool类型布尔类型 真 TRUE ,假 FALSE 系统关键字不可以加引号
提示 mysql中无真正布尔类型 true 存储为1 FALSE 存储为2
日期事件类型
DATE 日期 员工生日 ‘1998-5-6’ 日期必须加引号
TIME时间类型 ,保存学生上课开始时间 ’8:0:0‘
DATETIME日期时间类型 记录会议 ‘2018-3-15 05:32:05’
!!!!加引号
字符串:
Varchar:变长字符串 数据必须用引号 适用于长度差距很大的数据 如员工简历 m小于65535
Char:定长字符串 char(m)不能超过255
Text(m):大型变长字符串 <=2G 近似20亿
‘a‘ char(4) a\0\0\0 varchar(4) a\0 varchar补位仅仅补1位 超出位数被删除 适用于长度相当的字符 书籍号
定长字符串浪费空间空间 变长节省空间
保存姓名 char(4)\0\0 char存取速度快 ,但空间浪费,
varchar存取速度慢与char
mysql中的列约束
create table 表名(列名,列类型 列约束)
constraint 约束 插入时必须要满足一定条件 否则不予保存 如员工编号不能重复 性别只能取之于男或女 工资为正
SQL标准里定义了如下6种约束 :
1.唯一约束 声明了唯一列不能出现重复值否则插入失败 UNIQUE EID INT UNIQUE; 编号唯一列约束
2.非空约束 计算机中空的含义 NULL表示应该有XX数据但没有确定的值 列如: 员工年终奖 NULL 类似的(还没到期),还没确定人选的部门经理 还没确定进入哪个部门的部门员工为null 姓名这一行不能加null 非空约束 -----NOT NULL 出现null插入失败
3.别名
约束 PRIMARY KEY 声明为主键的列上不能有重复和空值 按照主键列的值进行排序 为了提高查找效率
一表中最多一个主键约束
4.默认值约束
SALARY DECIMAL(6,2) DEFAULT 5000在 insert into emp (‘’fault‘)
5.检查约束 ————CHECK 检验数据有效范围 salary decimal(8,2) AGE INT CHECK(AGE>18and AGE<=60);
可以为负数 MYSQL 不支持
6外键约束 :
1小知识项目中如何存储时间
(1) varchar ‘2015-03-15’不足:不会自动补0,不便于比较大小
(2) 使用date/datetime 会自动补0 便于比较大小
不足 i18n =internationalization 国际化 一个实现国际化的应用针对不同语言风俗习惯的用户呈现不同内容
使用bigint来存储
计算机如何存储日期时间:表示距离计算机元年经过了多少毫秒 1970-1-1 0:0
(3
使用bigint来存储 便于实现国家化 使用后面语言很容易实现 下载时间按151123456789
小知识: MYSQL专用 auto_increment 自动增长 可以为整形的主键列aUTO_INCREMENT 关键字 ,实现增长
必须用在INT/ uid int primary key Autoincrement 自增列允许手工赋值 在已有最大值基础+1
6.外键约束 : 一个表里的内容要参考另一个表的内容
声明了外键约束列上可以出现重复值也可以出现null值,每插入一个值都要参考另外一表的主 foreign key (deptid)references dept(did) ; 只要表中出现外键列 所有insert/update 语句操作 都要检查被参考的表 ,影响插入和修改的效率 项目组主键约束必须有
简单查询: SELECT SQL
1.查询特定的列 SELECT ename,eid FROM emp;
查询所有部门名称及其所在地 SELECT dname,acation from emp;
姓名,生日,工资 SELECT ename,birthday,salary FROM emp;
所在部门编号,性别,性别,姓名SELECT deptId,sex,sex,ename FROM emp;
查询员工编号,姓名,生日,工资,性别,所在部门编号;
*只能按照原始顺序输出 指代所有的列
select *FROM emp where ename=‘KING'
查询所有员工的编号和姓名 要求列名用中文显示 select eid AS 编号,ename AS 姓名;
姓名 工资 和所在部门 SELECT ename AS 姓名,salary AS 工资,deptId AS 部门编号 FROM emp;
要求列名用每个列名都用一个英文字符显示
SELECT ename AS E,salary AS S,deptId AS D FROM dep;
as关键字可以省略
只显示不同的值 查询出有员工的部门的编号
相同值只显示一次 SELECT DISTINCT depId FROM emp;
查出那些性别的员工 SELECT DISTINCT sex FROM emp;
7.查询时执行计算: 计算一个算式的结果 (1+2)*3/4
SELECT (1+2)*3/4;
查询出员工姓名 月薪 加年薪
SELECT ename 姓名,salary+500 月薪,salary*12+20000 年薪 from emp;
SELECT ename 姓名,((salary+500)*12+20000)/12 平均工资 from emp;
扣0.2的个税 请计算每人实际到手
SELECT ename 姓名,salary*0.8 到手工资 from emp;
7.简单查询 :单一条件查询 查询出编号为7788的员工所有信息 SELECT * from emp where eId=7788; 此处可以用 sql中比较运算符<,>,= ,!=不等于
SELECT * from dname where deptId=20;
TOM工资和生日 SELECT salary 工资,birthday 生日 SELECT salary 工资,birthday 生日from emp where ename=TOM;
SELECT * FROM emp where salary >6000;
SELECT ename 姓名,birthday 生日 FROM emp WHERE SEX=0;
SELECT ename 姓名 FROM emp WHERE deptId=20;
SELECT * FROM emp WHERE deptId !=20;
注意 计算机null代表具有不确定的意思 不与任何值相等或不等 做运算查不到数据 不能使用等于或者不等于运算 用is NULL IS NOT NULL 不能简写
8.多条件查询 多条件并列出现时需要使用and,or之一
SELECT * FROM emp WHERE sex=0 AND deptId=10;
练习 工资小于6000 男
SELECT * FROM emp WHERE sex=1 AND salary <6000;
生日晚于1990-1-1的·20号部门员工
SELECT * FROM emp WHERE birthday>'1990-1-1 'AND deptId=20;
10和30所有
SELECT * FROM emp WHERE deptId=10 OR deptId=30;
3000-8000所有信息
SELECT * FROM emp WHERE salary>=6000 AND salary<=8000;
1990年出生的人
SELECT * FROM emp WHERE birthday>='1990-1-1'AND birthday <='1990-12-31';
10.模糊条件查询 姓名包含字符E的员工信息 where ename like ’%E%’; %表示任意多个任意字符
模糊查询不能用= 要用like _表示任意的一个字符
姓名以E开头 ,结尾,倒数第二个
SELECT * FROM emp WHERE ename like 'E%';
SELECT * FROM emp WHERE ename like '%E';
SELECT * FROM emp WHERE ename like '%E_';
11.查询结果的排序
所有员工信息 按工资有小到大排列
SELECT * FROM emp ORDER BY salary; 默认升序
order by ASC为升序 可不写 降序 DESC
所有员工信息按照姓名由小到大排列
SELECT * FROM emp WHERE deptID=10 ORDER BY ename desc;
按照年龄由大到小排列
SELECT * FROM emp ORDER BY birthday ASC;
按照工资由大到小排列 工资相同 姓名由大到小
SELECT * FROM emp ORDER BY birthday DESC
顺序seclect * from emp order by salary DESC,enname ASC;
工资由小到大 女在男之前 先排性别
SELECT *FROM emp ORDER BY sex ASC,salary DESC;