1、关系模型(结构化数据类型)
关系模型
实体-关系模型
对象关系模型:基于对象的数据类型
半结构化数据模型:xml(扩展标记语言)
2、SQL分为这样的几类
DML:数据操作语言,像增删查改INSERT、DELETE、SELECT、UPDATE
DDL:数据定义语言,定义的是数据库对象,这样的对象有 库、表、索引、视图、用户、存储过程、存储函数、触发器、事件调度器CREATE、DROP、ALTER。
DCL:数据控制语言,像GRANT、REVOKE,这些是专门用来实现访问权限的设置。
3、文件记录组织方式:
堆文件组织
顺序文件组织
散列文件组织
4、表的文件有两个:表结构定义文件、表数据文件
表空间:table space 是一种比较高级的文件管理器,它可以将多个文件表用一个管理器管理。
5、数据字典 Data Dictionary
其实就是元数据。各种关系的元数据。
比如说关系的名字、字段名字、字段的类型和长度、视图、约束、用户名字、授权、密码。他们和数据本身没有关系,其实都是元数据。
6、要是需要载入到内存中的数据比内存还大,怎么办?
在内存中有个缓冲区管理器。他有一个置换策略。
7、MySQL是属于MySQL AB公司(瑞典的一家公司),后来被sun公司收购,sun又被oracle收购。
8、MySQL的安装:
专用的软件包管理器包:deb、rpm
通用二进制格式包gcc、icc
源代码包:5.5之前用make编译,之后用cmake编译(cross make,跨平台编译,cmake可能需要自己安装)
要是我们需要自己定制一些功能,我们就需要自己编译,需要用源代码包安装。要是默认的话我们就直接用编译好的安装包。
9、安装完了MySQL,一般会自动生成五个账户:
三个root账户:root@127.0.0.1 ,root@localhost, root@hostname
两个匿名账户:' '@localhost, ' '@hostname
匿名账户是系统不安全因素,所以要删除他们。
删除用户的方法:mysql> DROP USER ' '@localhost
10、MySQL密码修改三种方式:
mysqladmin -u USENAME -h password 'NEW_PASS' -p
mysql> SET PASSWORD FOR 'USENAME'@'HOST' =PASSWORD('new_pass');
mysql> UPDATE mysql.user SET PASSWORD=PASSWORD('new_pass') WHERE CONDITION;
12、客户端mysql与服务器端mysqld之间进行通信的方式:
要是在同一台主机上Unix:mysql-->mysql.sock-->mysqld
windows:mysql-->memory(pipe)-->mysqld
不在同一台主机上,基于TCP/IP协议通信。
13、MySQL客户端工具
mysql
mysqldump
mysqladmin
mysqlcheck
mysqlimport
14、非客户端工具
myisamchk
myisampack
15、忘记了root的密码,出现在进入mysql工具时,总是有错误提示:
# mysql -uroot -p
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'localhost'
(using password: NO)
解决方法:http://blog.csdn.net/polokang/article/details/6442531
切换到root用户,然后进入mysql 的bin目录后,
root@cps-desktop:/usr/local/mysql/bin# /etc/init.d/mysql stop
root@cps-desktop:/usr/local/mysql/bin# ./mysqld_safe --user=mysql --skip-grant-tables --skip-networking
&
root@cps-desktop:/usr/local/mysql/bin# ./mysql -u root mysql
mysql> UPDATE user SET Password=PASSWORD('newpassword') where
USER='root';
mysql> FLUSH PRIVILEGES;
mysql> quit;
最后重启数据库:
root@cps-desktop:/usr/local/mysql/bin# /etc/init.d/mysql restart
root@cps-desktop:/usr/local/mysql/bin# mysql -u root -p
Enter password: <输入新设的密码newpassword>
mysql>
注意:可能目录会不一样,要注意灵活应变。
16、登录mysql的注意事项
一般登录mysql的话需要填写很多东西,很麻烦:
mysql -u user -p
然后还需要输入一长串的密码,很不方便,于是我们在用户的家目录下面建一个配置文件.my.cnf 他是一个隐藏文件,注意不能让其他人看见,里面有你的密码啊什么的。
在里面输入(比如说):
这样我们就可以直接输入mysql就可以登录了:
是不是很帅!
17、查看现在的用户名
进入mysql
use mysql;
SELECT User,Host,Password FROM user
这样就可以查看现有的用户名了
18、MySQL有两个重要的存储引擎:MyISAM、InnoDB
存储引擎又叫做表类型。mysql下面每一个表都可以选择自己的存储引擎。
对于MyISAM每个表有三个文件:.frm表结构 .MYD表数据 .MYI表索引
InnoDB:支持所有表共享一个表空间文件, 但是建议每一个表用一个表空间文件。达到上面的目的,在mysql中用命令SHOW VARIABLES LIKE ‘%innodb%’;可以查看与innodb相关的变量innodb-file-per-table,在配置文件中可以将它永远改为ON,然后重启服务器。 --为每一个表分配一个表空间。 它的表有这样的文件: .frm表结构 .idb:表空间(表数据和表索引)
ubuntu的数据库的文件的存放路径:/var/lib/mysql
这个路径可以在/etc/mysql/my.cnf里边设置。
datadir = /var/lib/mysql
19、端口号是3306
mysql 的命令
--user, -u
--host, -h
--password, -p
--port
--protocol
--database DATABASE, -D ,进入的时候就直接确认了默认的DATABASE
--html 用html格式显示我们的结果
--xml 用xml格式显示结果
mysql>
交互式模式
批处理模式(脚本模式)
mysql < init.sql ,将init.sql脚本用mysql执行
mysql>
命令两类:
客户端命令
服务器语句:有语句结束符,默认;
d: 定义语句结束符
客户端命令:
c: 提前终止语句执行
g: 无论语句结束符是什么,直接将此语句送至服务器端执行;
G: 无论语句结束符是什么,直接将此语句送到服务器端执行,而且结果以竖排方式显示;
! COMMAND: 执行shell命令
W: 语句执行结束后显示警告信息;
#: 对新建的对象,支持补全功能;
# mysqladmin [options] command [arg] [command [arg]] ...
# mysqladmin -uroot -p password 'NEW_PASS' 不需要登录mysql也能执行mysql语句。它是一个具有很有子命令选项的命令。
# mysqladmin create testdb 可以不需要输入登录信息,可以直接读取我们的配置信息。
create DATABASE
drop DATABASE
ping
processlist
status
--sleep N:显示频率
--count N: 显示多个状态
extended-status: 显示状态变量
variables: 显示服务器变量
flush-privileges: 让mysqld重读授权表, 等同于reload;
flush-status: 重置大多数的服务器状态变量
flush-logs: 二进制和中继日志滚动
flush-hosts:
refresh: 相当于同时执行flush-hosts和flush-logs
shutdown: 关闭mysql服务器进程
version: 服务器版本及当前状态信息;
start-slave: 启动复制,启动从服务器复制线程;
SQL thread
IO thread
stop-slave: 关闭复制;
mysql客户端除了mysql,mysqladmin,还有mysqldump, mysqlimport, mysqlcheck
20、一个很常用的命令
show table status like '****'
21、JDBC、ODBC
22、MySQL的数值类型可以参考http://blog.sina.com.cn/s/blog_46f224ea010008zp.html
23、查看怎么创建数据库可以help一下 HELP CREATE DATABASE
24、查看字符集 SHOW CHARACTER SET
修改数据库 help alter database;
删除数据库 DROP {DATABASE | SCHMA} [IF EXITS] db_name;我们可以用HELP DROP DATABASE;来查看删除数据库的语法和用法。
创建表可以用help create table来查看语法。
一张表可以有多个主键,但是只能有一个唯一键。键也称为约束,可用作索引,但是是特殊的索引。
查看一个表用 SHOW TABLE STATUS LIKE 'table name'; 就可以了,查看一个表的格式,用SHOW TABLE STATUS LIKE 'table name'G
修改表帮助HELP ALTER TABLE
25、我已经受不了慢慢看另了。找了一些常用命令:
来自:http://www.jb51.net/article/18667.htm
一、连接MYSQL。
格式: mysql -h主机地址 -u用户名 -p用户密码
1、连接到本机上的MYSQL。
首先打开DOS窗口,然后进入目录mysqlin,再键入命令mysql -u root -p,回车后提示你输密码.注意用户名前可以有空格也可以没有空格,但是密码前必须没有空格,否则让你重新输入密码.
如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是: mysql>
2、连接到远程主机上的MYSQL。假设远程主机的IP为:110.110.110.110,用户名为root,密码为abcd123。则键入以下命令:
mysql -h110.110.110.110 -u root -p 123;(注:u与root之间可以不用加空格,其它也一样)
3、退出MYSQL命令: exit (回车)
二、修改密码。
格式:mysqladmin -u用户名 -p旧密码 password 新密码
1、给root加个密码ab12。首先在DOS下进入目录mysqlin,然后键入以下命令
mysqladmin -u root -password ab12
注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。
2、再将root的密码改为djg345。mysqladmin -u root -p ab12 password djg345
三、增加新用户。
(注意:和上面不同,下面的因为是MYSQL环境中的命令,所以后面都带一个分号作为命令结束符)格式:grant select on 数据库.* to 用户名@登录主机 identified by “密码”
1、增加一个用户test1密码为abc,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用root用户连入MYSQL,然后键入以下命令:
grant select,insert,update,delete on *.* to test1@”%” Identified by “abc”;
但增加的用户是十分危险的,你想如某个人知道test1的密码,那么他就可以在internet上的任何一台电脑上登录你的mysql数据库并对你的数据可以为所欲为了,解决办法见2。
2、增加一个用户test2密码为abc,让他只可以在localhost上登录,并可以对数据库mydb进行查询、插入、修改、删除的操作(localhost指本地主机,即MYSQL数据库所在的那台主机),
这样用户即使用知道test2的密码,他也无法从internet上直接访问数据库,只能通过MYSQL主机上的web页来访问了。
grant select,insert,update,delete on mydb.* to test2@localhost identified by “abc”;
如果你不想test2有密码,可以再打一个命令将密码消掉。
grant select,insert,update,delete on mydb.* to test2@localhost identified by “”;
下篇我是MYSQL中有关数据库方面的操作。注意:你必须首先登录到MYSQL中,以下操作都是在MYSQL的提示符下进行的,而且每个命令以分号结束。
一、操作技巧
1、如果你打命令时,回车后发现忘记加分号,你无须重打一遍命令,只要打个分号回车就可以了。
也就是说你可以把一个完整的命令分成几行来打,完后用分号作结束标志就OK。
2、你可以使用光标上下键调出以前的命令。
二、显示命令
1、显示当前数据库服务器中的数据库列表:
mysql> SHOW DATABASES;
注意:mysql库里面有MYSQL的系统信息,我们改密码和新增用户,实际上就是用这个库进行操作。
2、显示数据库中的数据表:
mysql> USE 库名;
mysql> SHOW TABLES;3、显示数据表的结构:
mysql> DESCRIBE 表名;
4、建立数据库:
mysql> CREATE DATABASE 库名;
5、建立数据表:
mysql> USE 库名;
mysql> CREATE TABLE 表名 (字段名 VARCHAR(20), 字段名 CHAR(1));6、删除数据库:
mysql> DROP DATABASE 库名;
7、删除数据表:
mysql> DROP TABLE 表名;
8、将表中记录清空:
mysql> DELETE FROM 表名;
9、显示表中的记录:
mysql> SELECT * FROM 表名;
10、往表中插入记录:
mysql> INSERT INTO 表名 VALUES (”hyq”,”M”);
11、更新表中数据:
mysql-> UPDATE 表名 SET 字段名1='a',字段名2='b' WHERE 字段名3='c';
12、用文本方式将数据装入数据表中:
mysql> LOAD DATA LOCAL INFILE “D:/mysql.txt” INTO TABLE 表名;
13、导入.sql文件命令:
mysql> USE 数据库名;
mysql> SOURCE d:/mysql.sql;14、命令行修改root密码:
mysql> UPDATE mysql.user SET password=PASSWORD('新密码') WHERE User='root';
mysql> FLUSH PRIVILEGES;15、显示use的数据库名:
mysql> SELECT DATABASE();
16、显示当前的user:
mysql> SELECT USER();
三、一个建库和建表以及插入数据的实例
drop database if exists school; //如果存在SCHOOL则删除
create database school; //建立库SCHOOL
use school; //打开库SCHOOL
create table teacher //建立表TEACHER
(
id int(3) auto_increment not null primary key,
name char(10) not null,
address varchar(50) default ‘深圳',
year date
); //建表结束//以下为插入字段
insert into teacher values(”,'allen','大连一中','1976-10-10′);
insert into teacher values(”,'jack','大连二中','1975-12-23′);如果你在mysql提示符键入上面的命令也可以,但不方便调试。
(1)你可以将以上命令原样写入一个文本文件中,假设为school.sql,然后复制到c:\下,并在DOS状态进入目录\mysql\bin,然后键入以下命令:
mysql -uroot -p密码 < c:\school.sql
如果成功,空出一行无任何显示;如有错误,会有提示。(以上命令已经调试,你只要将//的注释去掉即可使用)。
(2)或者进入命令行后使用 mysql> source c:\school.sql; 也可以将school.sql文件导入数据库中。
四、将文本数据转到数据库中
1、文本数据应符合的格式:字段数据之间用tab键隔开,null值用\n来代替.例:
3 rose 大连二中 1976-10-10
4 mike 大连一中 1975-12-23
假设你把这两组数据存为school.txt文件,放在c盘根目录下。
2、数据传入命令 load data local infile “c:\school.txt” into table 表名;
注意:你最好将文件复制到\mysql\bin目录下,并且要先用use命令打表所在的库。
五、备份数据库:(命令在DOS的\mysql\bin目录下执行)
1.导出整个数据库
导出文件默认是存在mysqlin目录下
mysqldump -u 用户名 -p 数据库名 > 导出的文件名
mysqldump -u user_name -p123456 database_name > outfile_name.sql
2.导出一个表
mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名
mysqldump -u user_name -p database_name table_name > outfile_name.sql
3.导出一个数据库结构
mysqldump -u user_name -p -d –add-drop-table database_name > outfile_name.sql
-d 没有数据 –add-drop-table 在每个create语句之前增加一个drop table
4.带语言参数导出
mysqldump -uroot -p –default-character-set=latin1 –set-charset=gbk –skip-opt database_name > outfile_name.sql
1. 备份数据库
mysqldump -uroot -p test_db > test_db.sql
2. 恢复数据库
mysql -uroot -p test_db < test_db.sql
3. 创建权限
grant all privileges on test_db.* to test_db@'localhost' identified by '123456';
兼容mysql4.1之前模式:
update mysql.user set password=old_password('123456') where user='test_db';
4. 忘记密码
在“my.cnf”或“my.ini”文件的“mysqld”配置段添加“skip-grant-tables”,然后重新启动mysql即可登录修改root密码。
26、用户操作
来自http://de.cel.blog.163.com/blog/static/51451236201261410651634/
1.--=============================快速创建用户并分配相关权限================================
GRANT 权限名 ON 数据库名.数据库表 TO 用户名@主机 IDENTIFIED BY ‘用户密码'权限名:为ALL时相当于ALL PRIVILEGES 代表所有权限;
数据库名:为*表示服务器上的所有数据库;
数据库表:为*表示数据库下的所有表;
主机:表示连接服务器的主机名称或IP地址,%表示从任何主机都可以连接服务器。
GRANT SELECT,INSERT,UPDATE,DELETE,DROP,EXECUTE ON sy_erp.* TO sy_user@"%" IDENTIFIED BY '20101118'
2. --=============================撤权并删除用户==========================================
要取消一个用户的权限,使用REVOKE语句。REVOKE的语法非常类似于GRANT语句,除了TO用FROM取代并且没有INDETIFED BY和WITH GRANT OPTION子句:
REVOKE 权限名 ON 数据库名.* FROM 用户名@主机
REVOKE语句只删除权限,而不删除用户。即使你撤销了所有权限,在user表中的用户记录依然保留,这意味着用户仍然可以连接服务器。要完全删除一个用户,你必须用一条Delete语句明确从user表中删除用户记录:
>mysql -uroot -proot mysql>Delete FROM user Where User="user_name" and Host="host_name";mysql
>FLUSH PRIVILEGES;
NOTE:楼主觉得这个应该还要确定我们用的是mysql数据库。所以上面第二行的user应该是mysql.user
Delete语句删除用户记录,而FLUSH语句告诉服务器重载授权表。(当你使用GRANT和REVOKE语句时,表自动重载,而你直接修改授权表时不是。)3. 查看用户权限
show grants for username@'%' 或show grants for username@localhost
27、查看当前用户用命令:
SELECT USER();
查看当前使用的数据库:
SELECT DATABASE();