Mysql数据库操作基础.ppt
MySQL,一、Mysql概述,特点:MySQL是一款从Linux系统上移植过来的优秀的开源软件,适应于所有的平台(在网上可以任意下载,并且可以查看到它的源文件,进行必要的修改)是一个真正的多用户、多线程SQL数据库服务器,是比较流行的关系数据库,把数据存储在表格中,使用标准的结构化查询语言SQL进行访问数据库。相对其他数据库而言,可以用16个字来概括MySQL,“短小精悍、功能齐全、运行极快、完全免费”使用上也越来越人性化,有多款图形界面的支持,操作越来越简单。Mysql在中小型企业网、门户网的应用中占据了相当大的优势,甚至在大型项目的开发中,MySQL也能应对自如。,在MySQL中,不仅支持SQL标准,而且还对其进行了扩展,使得它能够支持更为强大的功能。下表给出SQL标准的关键字及其功能:,下表介绍MySQL支持的SQL语句:,mysql中有三种注释方式:l 以“#”号开头直到行尾的所有内容都是注释。2以“-”号开头直到行尾的所有内容都是注释,注意在“-”后面还有一个空格。3以“/*”开始,以“*/”结束的所有内容都是注释,可以对多行进行注释。,二、如何启动、关闭mysql服务器,启动、停止MySQL服务器的方法有两种:系统服务器和 命令提示符(dos)在命令提示符下启动MySQL:进入DOS窗口,在命令提示符下输入如下指令:net start MySQL(启动)、net stop MySQL(停止),第一种方法直接启动mysql,在启动后的窗口中输入密码即可,如何连接MySQL服务器,第二种方法:采用命令首先设置环境变量:在命令提示符中设置或者在windows的path中设置,其次启动mysql(可省略),采用这种方式就不需要每次都在启动和连接数据库之前在命令行窗口中执行命令设置path环境变量了,最后连接MYSQL 格式:mysql-h主机地址-u用户名-p用户密码 连接远程机器:mysql-h10.4.3.188-uptsdb-p 等价写法 mysql-host=10.4.3.188-user=ptsdb-password 连接本地机器:mysql-uroot-p 等价写法 mysql-user=root-p(注:u与root可以不用加空格,其它也一样)下面对以上参数进行解释说明。-u:用户名。-h:MySQL所在服务器地址。-p:用户密码。输入完命令语句后,按下Enter键就进入到了MySQL数据库中。,第三种先打开命令提示符,切换到C:Program FilesMySQLMySQL Server 5.0bin(Mysql的与运行目录)进行连接,注意用户在连接数据库时,如果只输入mysql也可以进入,但是这样用的是一个匿名用户登陆,虽然无需用户名、密码,就可以直接登录,但是非常不安全。最好使用文中提到的连接格式,养成良好的书写习惯。如果密码在“-p”后直接给出,那么密码就是明文显示出来的,例如:MySQL u root h127.0.0.1 p 123456为了安全,我们可以输入p后就按Enter键,然后在一下行中再输入密码,这样输入的就是密文密码。,三、修改连接mysql的密码,1.通过修改MYSQL数据库中MYSQL库的USER表用普通的UPDATE语句修改 mysql 状态下输入 usemysqlupdate user set password=password(新密码)where user=root;回显 Query OK,0 rows affected(0.00 sec)Rows matched:2 Changed:0 Warnings:0 mysql 状态下输入 FLUSH PRIVILEGES;回显Query OK,0 rows affected(0.00 sec)mysql 状态下输入 quit 或exit退出 sql,注意:每个命令后都要加上一个分号;mysql 才开始执行该行命令而FLUSH PRIVILEGES指令会让已载入记忆体的 mysql 系统资料库更新 重起 mysql.在更新 root 密码后,日后要与 MySQL 连线的方法为:mysql-uroot-p新密码,2.在命令行中使用如下命令(注意不是mysql提示符下)C:Program FilesMySQLMySQL Server 5.0binmysqladmin-u root-p password 123456接下来会提示 Enter password:如果你是第一次登陆还没修改过密码,直接回车就可以了(以前初始密码是root的话输入root)。这是 root 密码就修改成了 123456。密码不要加引号,否则密码就修改成了 123456 这个8位字符,而不是6位的了。,3.忘记MYSQL密码的解决方案 1、net stop mysql 停止mysql服务2、执行mysqld-nt-skip-grant-tables 这样启动,不需要密码就可以进入MySQL了3、此时打开一个新的命令窗口,执行mysql,进入MySQL4、修改root密码 use mysql update user set password=password(NEWPASSWORD)where user=root;flush privileges;5、在任务管理器里kill掉mysqld-nt进程6、net start mysql 重启MySQL即可,数值类型(例如:Float,Int,Double 等)日期和时间类型(例如:Date,Time,TIMESTAMP等)String类型(CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM),四、Mysql常用的数据类型:,数值类型,Float(同义real)小(单精度)浮点数。允许的值是-3.402823466E+38到-1.175494351E-38、0和1.175494351E-38到3.402823466E+38。Double(同义DOUBLE PRECISION)普通大小(双精度)浮点数。允许的值是-1.7976931348623157E+308到-2.2250738585072014E-308、0和2.2250738585072014E-308到 1.7976931348623157E+308,日期和时间类型,表示时间值的DATE和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。每个时间类型有一个有效值范围和一个“零”值,当指定不合法的MySQL不能表示的值时使用“零”值。TIMESTAMP类型有专有的自动更新特性,日期和时间类型-Date,DATE日期。支持的范围为1000-01-01到9999-12-31。MySQL以YYYY-MM-DD格式显示DATE值,但允许使用字符串或数字为DATE列分配值。,日期和时间类型-Datetime,DATETIME日期和时间的组合。支持的范围是1000-01-01 00:00:00到9999-12-31 23:59:59。MySQL以YYYY-MM-DD HH:MM:SS格式显示DATETIME值,但允许使用字符串或数字为DATETIME列分配值。,日期和时间类型-TIMESTAMP,TIMESTAMP(Mysql 4.1版本以下)时间戳。范围是1970-01-01 00:00:00到2037年。TIMESTAMP列用于INSERT或UPDATE操作时记录日期和时间。如果你不分配一个值,表中的第一个TIMESTAMP列自动设置为最近操作的日期和时间。也可以通过分配一个NULL值,将TIMESTAMP列设置为当前的日期和时间。TIMESTAMP值返回后显示为YYYY-MM-DD HH:MM:SS格式的字符串,显示宽度固定为19个字符,日期和时间类型-Time,TIME时间。范围是-838:59:59到838:59:59。MySQL以HH:MM:SS格式显示TIME值,但允许使用字符串或数字为TIME列分配值。,日期和时间类型,下面的表显示了各类“零”值的格式。请注意如果启用NO_ZERO_DATE SQL模式,使用这些值会产生警告。,String类型-CHAR和VARCHAR类型,CHAR和VARCHAR类型声明的长度表示你想要保存的最大字符数。例如,CHAR(30)可以占用30个字符。CHAR列的长度固定为创建表时声明的长度。最大长度为 8,000 个字符。VARCHAR列中的值为可变长字符串。最大长度为 8,000 个字符。,下面的表显示了将各种字符串值保存到CHAR(4)和VARCHAR(4)列后的结果,说明了CHAR和VARCHAR之间的差别:,char是一种固定长度的类型,varchar则是一种可变长度的类型 char(M)类型的数据列里,每个值都占用M个字节,如果某个长度小于M,MySQL就会在它的右边用空格字符补足(在检索操作中那些填补出来的空格字符将被去掉)在varchar(M)类型的数据列里,每个值只占用刚好够用的字节再加上一个用来记录其长度的字节(即总长度为L+1字节)。char 固定长度,所以在处理速度上要比varchar快速很多,但是对费存储空间,所以对存储不大,但在速度上有要求的可以使用char类型,反之可以用varchar类型来实现,BINARY和VARBINARY类型,BINARY和VARBINARY类类似于CHAR和VARCHAR 它们包含字节字符串而不是字符字符串。BINARY和VARBINARY允许的最大长度一样,如同CHAR和VARCHAR,不同的是BINARY和VARBINARY的长度是字节长度而不是字符长度。,String类型-BLOB和TEXT类型,可以容纳可变数量的数据 BLOB 列被视为二进制字符串(字节字符串)。TEXT列被视为非二进制字符串(字符字符串)。Text数据类型的列可用于存储大于8kb的字符。,五、Mysql数据库管理的基本操作,1.数据库的相关操作(创建、删除、查看、选择)2.MySQL数据库中的一些字段类型解释3.数据表的操作(创建、删除、修改)4.添加、删除、修改数据,1.数据库的相关操作,1)创建数据库使用MySQL创建数据库,格式如下:MySQL CREATE DATABASE*;Query OK,1 row affected(0.01 sec)2)显示数据库列表:mysqlshow databases;3)选择要用的数据库,查看包含的信息MySQL USE*;Database changedMySQL SHOW TABLES;,4)显示表格 mysqlshow tables from mydb(数据库名);显示表结构:mysqldesc mydb.tablename;等价于mysqlshow columns from mydb.tablename;5)删除数据库 MySQL DROP DATABASE*;6)显示MySQL数据库的版本:mysqlselect version();,SQL主要语句语法数据定义语句,CREATE DATABASE语法CREATE TABLE语法 CREATE INDEX语法 DROP DATABASE语法 DROP INDEX语法 DROP TABLE语法 ALTER TABLE语法 RENAME TABLE语法,CREATE TABLE语法,CREATE TABLE(列级完整性约束条件,列级完整性约束条件),);,注:列级约束条件有两个任选项:NOT NULL,表示此列不得置NULL,在其后还可加UNIQUE任选项,表示列值不得重复。DEFAULT,当此列的值空缺时,填以缺省值例如:stu_id char(20)not null,price float default 0.01,表级完整性约束条件,主关键字约束指定表的一列或几列的组合的值在表中具有惟一性,即能惟一地指定一行记录。每个表中只能有一列被指定为主关键字,且IMAGE 和TEXT 类型的列不能被指定为主关键字,也不允许指定主关键字列有NULL 属性。语法如下:CONSTRAINT constraint_namePRIMARY KEY(column_name)column_name指定组成主关键字的列名constraint_name指定约束的名称约束的名称,Create table products(id char(20)not null,price float default 0.01,constraint primary key(id);,CREATE INDEX语法,CREATE INDEX index_name ON tbl_name(index_col_name,.)注:index_col_name:col_name(length)ASC|DESC 例如:create index stu_age on student(age ASC);,ALTER TABLE语法,ALTER TABLE tbl_name ADD完整性约束 DROP列名 MODIFY;ADD用于增加新列和新的完整性约束条件,新增加的列一律为空值。(index,primary key等)DROP用于删除指定的完整性约束条件(index,primary key,foreign key)MODIFY用于修改原有的列定义,Alter table aa add primary key(id);Alter table aa add name char(20);Alter table aa drop primary key;Alter table aa modify id char(100)not null;,RENAME TABLE语法,RENAME TABLE tbl_name TO new_tbl_name 对一个表重命名例如:rename table student to ss;,创建,删除视图(view),创建视图语法:Create view(,.)As select查询语句删除视图语法:Drop view 视图名,Create view stu_test(id,name)As select stu_id,name from student;Drop view stu_test;,SQL主要语句语法-数据操作语句,SelectUpdateInsertDelete,Select查询语句,SELECT ALL|DISTINCT,FROM,WHERE GROUP BY HAVING ORDER BYASC|DESC;,Select查询语句,SELECT指明需要查询的项目,一般是列名,也可以是表达式,查询表中未存储但可导出的结果。WHERE用来说明查询的条件DISTINCT任选项用来消除查询结果的重复项GROUP用来将结果按列名1的值进行分组,该属性列值相等的元组为一组ORDER将结果表按列名2的值升序或降序排序,where,查询满足条件的元组(where 子句)比较大小确定范围(BETWEENAND/Not Beteween.and)确定集合(IN,NOT IN)字符匹配(LIKE,NOT LIKE)可适用通配符%和 _。%:代表任意长度(长度可以为0)的字符串:a%_:代表任意单个字符:a_,Select*from student;Select*from student where age not between 18 and 19;Select*from student where name like a%;,Update修改语法,一般格式:INSERT INTO(,)VALUES(,)功能是将新元组插入指定的表中INTO中没有出现的属性列,新纪录在其上取空值属性列省略则按已有关系模式顺序插入,且其在每个属性列上均有值。Insert into student values(1,aa,asdf,1980-12-09);Insert into student(stu_id,name)values(2,bb);,INSERT INTO(,)子查询;,Insert 插入语法,Delete删除语法,DELETE FROM WHERE;功能是从指定表中删除满足条件的所有元组如果省略WHERE子句,表时删除表中全部元组,但表的定义仍在数据字典中。即:只删除数据。例如:Delete from student where name=“aa”;,从Mysql中导入和导出数据库结构,导入数据库 常用source 命令 进入mysql数据库控制台,如mysql-u root-p mysqluse 数据库 然后使用source命令,后面参数为脚本文件(如这里用到的.sql)mysqlsource d:/test_db.sql,使用mysqldump:(mysqldump命令位于mysql/bin/目录中)几个常用用例:1.导出整个数据库mysqldump-u 用户名-p 数据库名 导出的文件名mysqldump-u root-p dataname dataname.sql这个时候会提示要你输入root用户名的密码,输入密码后dataname数据库就成功备份在mysql/bin/目录中.,2.导出一个表mysqldump-u 用户名-p 数据库名 表名 导出的文件名mysqldump-u root-p dataname users dataname_users.sql3.导出一个数据库结构mysqldump-u wcnc-p-d-add-drop-table dataname d:wcnc_db.sql-d 没有数据-add-drop-table 在每个create语句之前增加一个drop table,