前端常见mysql知识点精解1

图片发自简书App


客户端连接到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; 

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,012评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,589评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,819评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,652评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,954评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,381评论 1 210
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,687评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,404评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,082评论 1 238
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,355评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,880评论 1 255
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,249评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,864评论 3 232
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,007评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,760评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,394评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,281评论 2 259