第一篇:mySql总结
Mysql命令:在mysql的bin目录下执行: Mysql –h host_name –u user_name –p password Use 数据库名;选定默认数据库(切换数据库)查询当前使用的数据库:select database(); Show databases;显示所有数据库;
Show tables ;显示默认数据库下的所有表; Show status;显示服务器状态信息 c;放弃正在输入的命令; h;显示命令清单;
s;显示mysql服务器状态信息; q;退出mysql;
Describe 表名:查看表结构;
档案柜相当于数据库,抽屉相当于表,抽屉中的文件相当于记录;
0x:加1到9的数字或者a到f就可以构成16进制了。注意零x中的x不能大写。字符串:单引号或者双引号引起来的都是字符串; Tinyint是1字节; Smallint是2字节; Mediumint是3字节; Int是4字节 Bigint是8字节; 删除主表前,先删除子表。选择主键的原则:
1)最少性:尽量选择单个键做为主键
2)稳定性:尽量选择数值更新少的列作为主键。查看自定义函数创建信息:
Show create function function_name;类型总结:
Tinyint :占一个字节,它的范围是-128到127 Smallint:占2个字节,它的范围是-2的15次方到2的15次方减一; Mediumint:占3个字节,它的范围是-2的23次方到2的23次方减一; Int:占4个字节,它的范围是-2的31次方到2的31次方减一; Bigint:占8个字节,它的范围是-2的63次方到2的63次方减一; Float:占4个字节 Double:占8个字节
Decimal(m,n):占m个字节; Char(10)和char(10 char)是一样的;
数值列的完整性约束讲解:
Auto increment(自动标识列):在需要产生唯一标示符号或者顺序值的时候,可用此属性。值从1开始,一般在插入null到auto increment列时,mysql会插入比当前列最大值大1的值。一个表中最多能有一个此属性的列。对于想使用此属性的列应该定义为not null,并定义为primary key或者定义为unique。
Null 和not null:默认是null,如果在插入数据时,指定了not null,那么在插入数据时必须要在此字段插入数据。如果指定了null ,那么在插入数据时,如果没有给此字段插入数据,此字段就插入null.mysql-h host-u user-p menagerie 注意,刚才显示的命令行中的menagerie不是你的 密码。如果你想要在命令行上在-p选项后提供 密码,则不能插入空格(例如,如-pmypassword,不是-p mypassword)。但是,不建议在命令行输入密码,因为这样会暴露 密码,能被在机器上登录的其它用户窥探到。
查询当前日期:使用curdate()函数,任何表都可以的。Select curdate()from cjym;可以通过year,month,day获取它的年月日。Select year(curdate())from cjym;Select month(curdate())from cjym;Select day(curdate())from cjym;Mysql中的_和%表示单个字符和零个或者多个字符; 有like 和not like比较操作符;
要想找出你的服务器支持哪个存储引擎,执行下面的语句: Show engines;Select 1/7;都可以; 日期和时间类型: Time :时间; Date:日期;
Datetime:日期和时间; 创建表:
Create table student(Student_id int(10)not null primary key auto_increment, Student_name varchar(20));注意在创建表的时候,如果是手动写sql语句的时候自动标示符要写这样的 auto_increment;有个下划线; 更改表结构操作:
给表添加一条字段:在最前面加字段用first,在最后面加用after;默认在最后加; Alter table student add age int first;给表设定默认值:
Alter table student alter column_name set default default_value;给表中的字段添加主键;如果主键存在则出现错误; Alter table student add primary key(column_name);删除表中的一列:
Alter table student drop column_name;删除表中的主键: Alter table student drop primary key;更改表的名字:
Alter table student rename as new_tablename;修改表中的字段类型: Alter table student modify sno int;运算符:
Between。。and用于检验一个值(一个求值表达式)是否存在一个指定的范围内;
Select 10 between 1 and 100;结果是1:表示是真的;
In 用于检验一个值(一个表达式)是否包含在一个指定的集合中。
Select 2 in(1,2,3,4,5,6),’a’ in(‘b’,’e’,.’h’);结果显示1和0;1表示真,0表示假;
Is null和is not null来测定是否为空;
特殊的运算符:<=>:mysql称它为null安全的等于; Select null=null,null< = >null;结果显示null和1; Regexp运算符; Mysql中的元字符;
逻辑运算符:and(&&),or(||),not(!)插入数据时,插入多行值时:
插入多行数据: Insert into 表名(列名)Select 列名 From 表名;
更改记录的操作语法格式:
Update 表名 set 列名=更新值 [where 更新条件] 删除记录的操作格式:
Delete from 表名 [where 删除条件]; 表和字段的引用方式有两种: 绝对引用:数据库名.表名(.字段名);相对引用:表名.(字段名); Where子句使用的谓词:
Between。。and。。在两数之间 Not between ….and ….不在两数之间 In:是否在特定的集合里。Not in :与上面相反。Like:是否匹配一个模式;
Regexp:检查一个值是否匹配一个常规表达式; 复制表:
Create table student select name,age from stu;复制表后,表中的字段和stu表中的字段一样并且记录数也是存在的;
学习地址:http://
Mysql的存储过程: Create procedure p()Begin End;
delimiter //
create procedure math_demo()begin
declare i int default 0;
declare d decimal(10,4)default 0;
declare f float default 0;
while i < 10000 do
set d = d +.0001;
set f = f +.0001E0;
set i = i + 1;
end while;
select d,f;end // call math_demo();
mysql中的自定义方法的使用 delimiter // create function function_name()returns return_type;begin
end;// 执行mysql自定义的函数用 Select function_name();
#mysql中的存储过程 delimiter //
create procedure math_demo()begin
declare i int default 0;
declare d decimal(10,4)default 0;…….return return_value;
declare f float default 0;
while i < 10000 do
set d = d +.0001;
set f = f +.0001E0;
set i = i + 1;
end while;
select d,f;end // call math_demo();// delimiter // create function xiaoxiao()returns int begin return 2;end;// #在mysql中创建的自定义函数要加的delimiter,都要一次性选中执行。每条语句都要用分号结束。delimiter // create function xiaoxiao1()returns int begin return 2;end // #执行mysql中的自定义函数 select xiaoxiao1();
根据一个布尔值来检验一个值,在这里布尔值可以是true,false,unknown;
运算符: 等号:=,<=>,不等号:!=,<>;赋值号::=; XOR
逻辑XOR。当任意一个操作数为 NULL时,返回值为NULL。对于非 NULL 的操作数,假如一个奇数操作数为非零值,则计算所得结果为 1,否则为 0。
a XOR b 的计算等同于(a AND(NOT b))OR((NOT a)和 b)。
Coalesce();函数的使用方法:
返回值为列表中第一非null值,在没有非null值的情况下返回null。
Greatest();函数的使用及功能说明:
当函数有2个或者2个以上的参数时,返回参数中的最大参数值,比较参数所依据的规律同least()函数相同。
Interval();函数的使用及功能说明: INTERVAL(N,N1,N2,N3,...)
假如N < N1,则返回值为0;假如N < N2 等等,则返回值为1;假如N 为NULL,则返回值为-1。所有的参数均按照整数处理。为了这个函数的正确运行,必须满足 N1 < N2 < N3 < ……< Nn。其原因是使用了二分查找(极快速)。
Least();函数的使用及功能说明: · LEAST(value1,value2,...)
在有两个或多个参数的情况下,返回值为最小(最小值)参数。用一下规则将自变量进行对比:
o 假如返回值被用在一个 INTEGER 语境中,或是所有参数均为整数值,则将其作为整数值进行比较。
假如返回值被用在一个 REAL语境中,或所有参数均为实值,则 将其作为实值进行比较。
o 假如任意一个参数是一个区分大小写的字符串,则将参数按照区分大小写的字符串进行比较。
o 在其它情况下,将参数作为区分大小写的字符串进行比较。o
假如任意一个自变量为NULL,则 LEAST()的返回值为NULL。
二,控制流函数 Case的使用: 格式1: Case value
when [compare_value] then result_value when [compare_value2] then result_value2 else result_value3 end
格式2: case when value=[compare_value1] then result_value else result_value2 end
IF(expr1,expr2,expr3)
如果 expr1 是TRUE(expr1 <> 0 and expr1 <> NULL),则 IF()的返回值为expr2;否则返回值则为 expr3。IF()的返回值为数字值或字符串值,具体情况视其所在语境而定。
ASCII()函数查看对应符号的ascii码。
第二篇:mysql问题解决总结
MySql问题解决总结
ERROR 1045(28000): Access denied for user 'root'@'localhost'(using password: YES)ERROR 1045(28000): Access denied for user 'root'@'localhost'(using password: NO)
这种问题就是mysql密码需要重置; 重置方式:
1.打开/etc/mysql/debian.cnf文件,里面存储了相关的密码,我的文件信息如下
sudovi /etc/mysql/debian.cnf# Automatically generated for Debian scripts.DO NOT TOUCH![client] host = localhost user = debian-sys-maint password = 6x1XG2B5p75WtFV2 socket = /var/run/mysqld/mysqld.sock [mysql_upgrade] host = localhost user = debian-sys-maint password = 6x1XG2B5p75WtFV2 socket = /var/run/mysqld/mysqld.sock basedir = /usr 在[client]段有user=以及password=这两行,这就是通过apt-get安装mysql,系统给我们设置的mysql登录名和密码
2.输入命令: mysql-udebian-sys-maint-pdebian-sys-maint即debian.cnf中user=后面的内容.回车后会提示输入密码,此时把password=后面的内容复制粘贴后回车即可进行mysql 控制台
3.进入控制台后.按以下步骤进行: use mysql;update user set password=PASSWORD('新密码')where user='root';FLUSH PRIVILEGES;此时可以输入quit;退出后用root帐号登录,也可以继续其他操作.
第三篇:MySql知识点总结
1.数据库创建 : Create database db_name;
数据库删除 : Drop database db_name;删除时可先判断是否存在,写成 : drop database if exits db_name.建表 : 创建数据表的语法 : create table table_name(字段1 数据类型 , 字段2 数据类型);
例 : create table mytable(id int , username char(20));
删表 : drop table table_name;例 : drop table mytable;.添加数据 : Insert into 表名 [(字段1 , 字段2 , ….)] values(值1 , 值2 , …..);
如果向表中的每个字段都插入一个值,那么前面 [ ] 括号内字段名可写也可不写
例 : insert into mytable(id,username)values(1,’zhangsan’);.查询 : 查询所有数据 : select * from table_name;
查询指定字段的数据 : select 字段1 , 字段2 from table_name;
例 : select id,username from mytable where id=1 order by desc;多表查询语句------------参照第17条实例.更新指定数据 , 更新某一个字段的数据(注意,不是更新字段的名字)
Update table_name set 字段名=’新值’ [, 字段2 =’新值’ , …..][where id=id_num] [order by 字段 顺序]
例 : update mytable set username=’lisi’ where id=1;
Order语句是查询的顺序 , 如 : order by id desc(或asc), 顺序有两种 : desc倒序(100—1,即从最新数据往后查询),asc(从1-100),Where和order语句也可用于查询select 与删除delete.删除表中的信息 :
删除整个表中的信息 : delete from table_name;
删除表中指定条件的语句 : delete from table_name where 条件语句;条件语句如 : id=3;.创建数据库用户
一次可以创建多个数据库用户如:
CREATE USER username1 identified BY ‘password’ , username2 IDENTIFIED BY ‘password’…..用户的权限控制:grant
库,表级的权限控制 : 将某个库中的某个表的控制权赋予某个用户
Grant all ON db_name.table_name TO user_name [ indentified by ‘password’ ];.表结构的修改
(1)增加一个字段格式:
alter table table_name add column(字段名 字段类型);----此方法带括号
(2)指定字段插入的位置:
alter table table_name add column 字段名 字段类型 after 某字段;
删除一个字段:
alter table table_name drop字段名;
(3)修改字段名称/类型
alter table table_name change 旧字段名 新字段名 新字段的类型;
(4)改表的名字
alter table table_name rename to new_table_name;
(5)一次性清空表中的所有数据
truncate table table_name;此方法也会使表中的取号器(ID)从1开始.增加主键,外键,约束,索引。。(使用方法见17实例)
① 约束(主键Primary key、唯一性Unique、非空Not Null)
② 自动增张 auto_increment
③外键Foreign key-----与reference table_name(col_name列名)配合使用,建表时单独使用
④ 删除多个表中有关联的数据----设置foreign key 为set null---具体设置参考帮助文档.查看数据库当前引擎
SHOW CREATE TABLE table_name;
修改数据库引擎
ALTER TABLE table_name ENGINE=MyISAM | InnoDB;.SQL语句运用实例:
--1 建users表
create table users
(id int primary key auto_increment, nikename varchar(20)not null unique, password varchar(100)not null, address varchar(200),reg_date timestamp not null default CURRENT_TIMESTAMP);
--2 建articles表,在建表时设置外键
create table articles(id int primary key auto_increment,content longtext not null,userid int,constraint foreign key(userid)references users(id)on delete set null);
---------
--2.1 建articles表,建表时不设置外键
create table articles(id int primary key auto_increment,content longtext not null,userid int);
--2.2 给articles表设置外键
alter table articles add constraint foreign key(userid)references users(id)on delete set null;
----------
--3.向users表中插入数据,同时插入多条
insert into
users
(id,nikename,password,address)
values(1,'lyh1','1234',null),(10,'lyh22','4321','湖北武汉'),(null,'lyh333','5678', '北京海淀');
--4.向article中插入三条数据
insert
into
articles
(id,content,userid)
values(2,'hahahahahaha',11),(null,'xixixixixix',10),(13,'aiaiaiaiaiaiaiaiaiaiaiaia',1),(14,'hohoahaoaoooooooooo',10);
--5.进行多表查询,选择users表中ID=10的用户发布的所有留言及该用户的所有信息
select articles.id,articles.content,users.* from users,articles where users.id=10 and articles.userid=users.id order by articles.id desc;
--6.查看数据库引擎类型
show create table users;
--7.修改数据库引擎类型
alter table users engine=MyISAM;---因为users表中ID被设置成外键,执行此句会出错
--8.同表查询,已知一个条件的情况下.查询ID号大于用户lyh1的ID号的所有用户
select a.id,a.nikename,a.address from users a,users b where b.nikename='lyh1' and a.id>b.id;
------也可写成
select id,nikename,address from users where id>(select id from users where nikename='lyh1');
9.显示年龄比领导还大的员工:
select a.name from users a,users b where a.managerid=b.id and a.age>b.age;
查询编号为2的发帖人: 先查articles表,得到发帖人的编号,再根据编号查users得到的用户名。
接着用关联查询.select * from articles,users得到笛卡儿积,再加order by articles.id以便观察
使用select * from articles,users where articles.id=2 筛选出2号帖子与每个用户的组合记录
再使用select * from articles,users where articles.id=2 and articles.userid=users.id选出users.id等于2号帖的发帖人id的记录.只取用户名:select user where user.id=(select userid from articles where article.id =2)
找出年龄比小王还大的人:假设小王是28岁,先想找出年龄大于28的人
select * from users where age>(select age from users where name='xiaowang');
*****要查询的记录需要参照表里面的其他记录:
select a.name from users a,users b where b.name='xiaowang' and a.age>b.age
表里的每个用户都想pk一下.select a.nickname,b.nickname from users a,users b where a.id>b.id;
更保险的语句:select a.nickname,b.nickname from(select * from users order by id)a,(se
lect * from users order by id)b where a.id>b.id;
再查询某个人发的所有帖子.select b.* from articles a , articles b where a.id=2 and a.userid=b.userid
说明: 表之间存在着关系,ER概念的解释,用access中的示例数据库演示表之间的关系.只有innodb引擎才支持foreign key,mysql的任何引擎目前都不支持check约束。
第四篇:mysql数据库要点总结
查询(R)Selec子句
书写顺序
Select distinct:要返回的列或表达式 From:从中检索数据的表 Where:行级过滤/分组前过滤 group by:分组说明
having:组级过滤/分组后过滤 order by:输出排序顺序desc/asc limit start, count:要检索的行数 limit 3,4 从第3行开始的连续4行
SELECT order_num,sum(quantity*item_price)ordertotal FROM orderitems WHEREorder_numBETWEEN20005AND 20009GROUP BY order_num HAVINGsum(quantity*item_price)>=50ORDER BYordertotalDESCLIMIT4;执行顺序
From表名->inner/left/right/ join on->where->group by->select distinct *->having->order by->limit start, count 插入Insert into(C)INSERT INTO students(name)values(‘杨过’),(‘小龙女’);更新(U)Update UPDATE customers SETcust_email = ‘elmer@fudd.com’WHEREcust_id = 10005;删除(D)Delete DELETE FROM customers WHEREcust_id = 10006;Truncate删除原来的表并重新创建一个表,删除标的全部内容时效率高。
操作表
创建CREATE TABLE customers(Cust_idint not null auto_increment primary key,Cust_name char(50)not null,Cust_addresschar(50)null)engine = innoDB;更新ALTER TABLE删除DROP TABLEcustomers2;重命名RENAME TABLE customers2 TO customers;操作数据库
创建CREATE DATABASE xxx charset = utf8;删除DROP DATABASEXXX;切换USE XXX;查看SHOW DATABASES;关联查询
INNER/LEFT/RIGHTJOIN ON SELECT students.name,subjects.title,scores.scoreFROM scores INNER JOIN students ONscores.stuid = students.id INNER JOIN subjects ONscores.subid = subjects.id;
第五篇:MySQL学习心得
MySQL学习心得
第一章
一、数据库管理系统(DBMS)是操作和管理数据库的大型软件,它按一定的数据模型组织数据。
例如:Oracle、SQL Server、MySQL、Access。
二、数据库应用系统在数据库管理系统(DBMS)支持下建立的计算机应用系统,简写:DBAS。
例如:.net Java。
三、字符集从大到小排序:utf8--gbk--gb2312。
四、mysql的特点:
适用于中小型网站中,体积小、速度快、总体拥有成本低,尤其是有开放源码这一特点。
五、目前Internet上浒的网站构架方式是LAMP(Linux+apache+mysql+php)即使用Linux作为操作系统,Apache作为Web服务器,MySQL作为数据库,PHP作为服务器端脚本解释器,由于4个软件都是遵循GPL的开放源码软件,因此使用这种方式不用花一分钱就可以建立起一个稳定、免费的网站系统。
第二章
一、安装过程中遇到的问题及解决方法:
安装过程中没有完成时计算机关机。(没有删除完文件)安装完成时找不到所配置的路径。(可以从配置文件中找到)
安装完成后无法正常使用。(在计算机管理中重新启动MySQL服务)安装到一半时没有出现下一步。(误把配置文件删除了)安装到最后一步时start service错误。到控制面板里面先把mysql删除.到c盘C:Program Files目录下把mysql目录删除.如果在其他盘还有设置目录也要删除.空目录也要删除 到regedit把注册表
HKEY_LOCAL_MACHINE/SYSTEM/ControlSet001/Services/Eventlog/Applications/MySQL HKEY_LOCAL_MACHINE/SYSTEM/ControlSet002/Services/Eventlog/Applications/MySQL HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Eventlog/Applications/MySQL 有的话,全部删除!(技巧:用F3循环查找“mysql”)如果任务管理器里有关mysql内容也删除 把防火墙关了
重新装mysql(这里我没有重启计算机)
重装时候有必要的话,重启计算机,停用IIS,和删除temp里的临时文件.实在不行的话,配置mysql时候,把mysql服务换个服务名.使用时输入中文会出错。(在配置时在“Character Set”选框中将latinl修改为gb2312;也可以在配置文件中修改)
二、启动服务器的方法: ① 方法1:
在 “计算机管理”中的“服务”项目中启动与停止。② 方法2: 使用命令(net start mysql和net stop mysql)
三、连接MySQL 格式: mysql-h主机地址-u用户名 -p用户密码
①先在打开DOS窗口,然后进入目录 mysqlbin(如果设置了环境变量,则直接输入命令即可。)②键入命令mysql-uroot-proot ③接回车即可进入到MYSQL中了 MYSQL的提示符是:mysql> 注明:直接打开Mysql command line client
四、MySQL注释符有三种: ①#...②“--...” ③
五、忘记密码重新更改密码
先停止mysql服务,修改D:MySQLMySQL Server 5.0 目录下的my.ini文件,在[mysqld]下添加skip-grant-tables 启动mysql服务后就可以以空密码登录,之后别忘记修改root密码
use mysql update user set password=password('hanaixia')where user='root';(分号不能少)password('hanaixia')此处必须用函数设置。
修改密码后需要重新启动服务或者使用 flush privileges;语句,用于从mysql数据库中的授权表重新载入权限。
把 skip-grant-tables 这一句删掉再重启mysql服务。