MySQL就这么简单第一部分

1.关于安装MySQL

  • 如果我们是redhat系列,可以直接利用光盘,构建本地YUM源,进行安装。
  • 注意,MySQL是Client/Server架构的,也就是说我们可以选择安装MySQL服务器和客户端。
  • 直接安装mysql-server即可,这样就可以将客户端也一并安装完成。
  • mysql为客户端进程,mysqld为服务器端进程。
  • 默认情况下,MYSQL在TCP/3306进行监听
  • 可以利用一下命令启动和连接MYSQL数据库
[[email protected] ~]# service mysqld start
Starting MySQL:                                            [  OK  ]
[[email protected] ~]# ps aux | grep -i mysql
root      3262  0.2  0.2   4500  1192 pts/0    S    22:45   0:00 /bin/sh /usr/bin/mysqld_safe --defaults-file=/etc/my.cnf --pid-file=/var/run/mysqld/mysqld.pid --log-error=/var/log/mysqld.log
mysql     3298  2.0  4.0 137224 17884 pts/0    Sl   22:45   0:00 /usr/libexec/mysqld --defaults-file=/etc/my.cnf --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip-locking --socket=/var/lib/mysql/mysql.sock
root      3321  0.0  0.1   3892   660 pts/0    R+   22:45   0:00 grep -i mysql
[[email protected] ~]# mysql -uroot -h192.168.204.88 -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2 to server version: 5.0.22
Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the buffer.
mysql>

说明:

MYSQL安装后有一个初始化动作。注意,MYSQL创建完成后,有一个独特的数据库,就叫MYSQL。【元数据信息】当前数据库系统上有多少个数据库,表,字段信息等等。所以刚开始初始化的过程,就是建立这个MYSQL库的过程。

从MYSQL的连接命令mysql -uUSERNAME -hHOST -pPASSWORD,可以看出,MYSQL的用户是由USERNAME和HOST共同组成。HOST可以是IP,HOSTNAME,也可以是通配符,如‘%‘。

2.关于分号


很多时候,我们在MYSQL的客户端执行命令的时候,必须输入;进行结束;但是有时候却可以不用输入,这是为什么呢?

MYSQL命令分为客户端命令和服务器端命令。

所谓服务器端命令,是必须要发送到服务器端执行的,那么服务器需要知道执行语句是否结束。默认情况下,语句结束符是分号。【什么DDL,DML,DCL】

而客户端命令,比如quit,不用发送到服务器,只需要MYSQL客户端执行就可以了。

?         (\?) Synonym for `help‘.
clear     (\c) Clear command.
connect   (\r) Reconnect to the server. Optional arguments are db and host.
delimiter (\d) Set statement delimiter. NOTE: Takes the rest of the line as new delimiter.
edit      (\e) Edit command with $EDITOR.
ego       (\G) Send command to mysql server, display result vertically.
exit      (\q) Exit mysql. Same as quit.
go        (\g) Send command to mysql server.
help      (\h) Display this help.
nopager   (\n) Disable pager, print to stdout.
notee     (\t) Don‘t write into outfile.
pager     (\P) Set PAGER [to_pager]. Print the query results via PAGER.
print     (\p) Print current command.
prompt    (\R) Change your mysql prompt.
quit      (\q) Quit mysql.
rehash    (\#) Rebuild completion hash.
source    (\.) Execute an SQL script file. Takes a file name as an argument.
status    (\s) Get status information from the server.
system    (\!) Execute a system shell command.
tee       (\T) Set outfile [to_outfile]. Append everything into given outfile.
use       (\u) Use another database. Takes database name as argument.
charset   (\C) Switch to another charset. Might be needed for processing binlog with multi-byte charsets.
warnings  (\W) Show warnings after every statement.
nowarning (\w) Don‘t show warnings after every statement.

3. 数据库就是目录

[[email protected] mysql]# pwd
/var/lib/mysql
[[email protected] mysql]# ls -l
total 20768
-rw-rw---- 1 mysql mysql 10485760 Aug 30 23:10 ibdata1
-rw-rw---- 1 mysql mysql  5242880 Aug 31 20:56 ib_logfile0
-rw-rw---- 1 mysql mysql  5242880 Mar  9  2012 ib_logfile1
-rw-rw---- 1 mysql mysql    20225 Aug  9 13:05 localhost.err
-rw-rw---- 1 mysql mysql   161462 Aug 29 16:23 localhost.localdomain.err
drwx------ 2 mysql mysql     4096 Aug 31 21:38 mydb1
drwxr-xr-x 2 mysql mysql     4096 Aug 29 17:05 mydb2
drwx--x--x 2 mysql mysql     4096 Mar  9  2012 mysql
srwxrwxrwx 1 mysql mysql        0 Aug 31 20:56 mysql.sock
-rw-r--r-- 1 mysql mysql      115 Mar  9  2012 RPM_UPGRADE_HISTORY
drwxr-xr-x 2 mysql mysql     4096 Mar  9  2012 test
[[email protected] mysql]#

默认情况下MYSQL安装至/var/lib/mysql.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema | 
| mydb1              | 
| mydb2              | 
| mysql              | 
| test               | 
+--------------------+
5 rows in set (0.00 sec)

注意到有mydb1,mydb2,mysql等这些数据库,同时观察/var/lib/mysql下有mydb1,mydb2,mysql这些目录。但是没有发现infomation_schema目录,因为information_schema这个数据库是MYSQL运行过程中产生的一些信息,存在于内存当中。

由于LINUX平台,区分大小写,因此LINUX平台下的MYSQL是可以创建mydb1,MYdb1这种名称。当然,WINDOWS平台又是另一回事了。

4. MySQL的数据类型初步


字符型:

char(n)      <=256个字符

无论如何占据n个空间

varchar(n)  占据空间是不定的   <=65535个字符

以上的字符型默认都是不区分大小写的。

binary(n) 以二进制格式存储的字符型,区分大小写

vbinary(n)

当然,上面的,内容有限,下面的是文本大对象:

text(n)   不区分大小写   text也有几个变种

blob(n)    二进制大对象,区分大小写

数值型:

精确数值型(整型)

int 当然这个int也有多个变种,如smallint bigint mediumint ...

decimal十进制

近似数值型(浮点型)

float

double

日期型:

time   时间

date   日期

datetime  日期时间

stamp   时间戳

5.MySQL命令初步


对于MYSQL而言,命令不分区大小写。

DDL:

create

drop

alter

DML:

insert

update

delete

DCL:

grant

revoke

创建,删除数据库命令:

create database xxx;

create database if not exists xxx;

drop database xxx;【MYSQL没有回收站,删除了,就删除了。】

drop database if exists xxx;

关于表:

create table xxx(

);

实际上,我们创建表是,应该这样指定的:

create table mydatabase.xxx(

);

为了方便,我们可以手动指定默认使用的数据库:

use mydatabase;

查看默认数据库:

mysql> select database();
+------------+
| database() |
+------------+
| mydb1      | 
+------------+
1 row in set (0.00 sec)
查看表:
mysql> show tables;
+-----------------+
| Tables_in_mydb1 |
+-----------------+
| users           | 
+-----------------+
1 row in set (0.00 sec)

其实际上,是show tables from xxxdatabase;

当然,由于我们使用了默认数据库,因此可以省略。

查看表结构:

desc xxxtable;

表名也是区分大小写的。【可能是单个文件存放的】

删除表:

drop table yyy;

修改表结构:

alter table xxx

modify   除名称外其他都可以改动

change   仅仅只能改名称

add

drop

mysql> alter table users add sex char(1) not null;
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0
mysql> desc users;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | varchar(10) | YES  |     | NULL    |       | 
| name  | varchar(20) | YES  |     | NULL    |       | 
| sex   | char(1)     | NO   |     | NULL    |       | 
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
mysql> alter table users change sex Sex char(1);

关于INSERT:

注意了,MYSQL支持批量插入。

insert into xxx(...) values (...),(...),(...);

关于UPDATE:

update xxx set col = yyy where ...

关于delete:

delete from tablename where ...;

关于创建用户:

create user [email protected]‘yyy‘ identified by ‘password‘

yyy: IP/HOSTNAME/通配符(* _)

一定要注意的是:

[email protected]

[email protected]是2个不同的用户。

mysql> create user ‘zhangfengzhe‘@‘192.168.204.88‘ identified by ‘zhangfengzhe‘;
Query OK, 0 rows affected (0.01 sec)
mysql> 
[[email protected] ~]# mysql -uzhangfengzhe -h192.168.204.88 -pzhangfengzhe
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8 to server version: 5.0.22
Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the buffer.
mysql>

关于授权grant

mysql> grant select on mydb1.users to [email protected];

grant x1,x2,x3 on mydatabase.mytable to [email protected];

【可以在授权的同时,在给用户USER+HOST指定密码,当然是没有密码的前提下】

回收权限

mysql> revoke select on mydb1.users from [email protected] ;

查看用户的权限列表:

mysql> show grants for ‘zhangfengzhe‘@‘192.168.204.88‘;
+-------------------------------------------------------------------------------------------------+
| Grants for [email protected]                                                          |
+-------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO ‘zhangfengzhe‘@‘192.168.204.88‘ IDENTIFIED BY PASSWORD ‘077f6efc49268c9e‘ | 
+-------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> grant select on mydb1.users to [email protected];
Query OK, 0 rows affected (0.00 sec)
mysql> show grants for ‘zhangfengzhe‘@‘192.168.204.88‘;
+-------------------------------------------------------------------------------------------------+
| Grants for [email protected]                                                          |
+-------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO ‘zhangfengzhe‘@‘192.168.204.88‘ IDENTIFIED BY PASSWORD ‘077f6efc49268c9e‘ | 
| GRANT SELECT ON `mydb1`.`users` TO ‘zhangfengzhe‘@‘192.168.204.88‘                              | 
+-------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

所有权限:

ALL PRIVILEGES

给一个用户的一个库中的所有表的权限:

grant ALL PRIVILEGES on mydb1.* to ‘zhangfengzhe‘@‘%‘;
时间: 2024-09-30 22:49:36

MySQL就这么简单第一部分的相关文章

mysql语句基本简单查询

mysql语句基本简单查询 第一节 -- or # 单行注释/***多行注释*/ -- c创建数据库examCREATE DATABASE exam; USE exam; /*创建部门表*/CREATE TABLE dept( deptno INT PRIMARY KEY, dname VARCHAR(50), loc VARCHAR(50)); /*创建雇员表*/CREATE TABLE emp( empno INT PRIMARY KEY, ename VARCHAR(50), job VA

基于Servlet、JSP、JDBC、MySQL的一个简单的用户注册模块(附完整源码)

最近看老罗视频,做了一个简单的用户注册系统.用户通过网页(JSP)输入用户名.真名和密码,Servlet接收后通过JDBC将信息保存到MySQL中.虽然是个简单的不能再简单的东西,但麻雀虽小,五脏俱全,在此做一归纳和整理.下面先上源码: 一.index.jsp <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path =

‘Mysql帮助’ 的简单使用

下面通过一个小例子,看一下Mysql帮助的简单使用. 如下图所示,grade表中有三列数据,现在我需要在表中增加"id"列.在我对mysql增加列的语汇不了解的情况下,尝试通过它的帮助解决问题. 下面就是登录Mysql后出现的界面,提示我们可以通过输入 "help" 或 "\h"获取帮助信息. 输入 "\h"后,提示我们输入 "help contents" 获取服务端的帮助信息. 输入"help

mysql数据库很简单操作

进入linux系统 root   >/usr/bin/mysql -u root mysql>show databases;                    #查看数据库 mysql>use  testtable;                        #testtable 为所要查看的库,应用数据库 mysql>show tables;                          #查看所有表 mysql>desc abc_table          

使用Direct2D实现一个简单第一人称引擎

这篇文章是对"a first person engine in 265 lines"[1]的一个Direct2D版的移植.看到这篇文章我立刻就想到了QUAKE,当然QUAKE使用了比这个更高效的技术.但是这个技术无疑更简单,更娱乐,同时也算是一种RayCast原理的使用.于是就想到用Direct2D做一个看看. 由于对Html5不熟,同时参考了Fredrik Wallgren[2]. 同时也参考了MS提供的Direct2D事例[3]. 代码托管:https://d2dfpsengine

进击的Python【第十二章】:mysql介绍与简单操作,sqlachemy介绍与简单应用

进击的Python[第十二章]:mysql介绍与简单操作,sqlachemy介绍与简单应用 一.数据库介绍 什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据.我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢.所以,现在我们使用关系型数据库管理系统(RDBMS)来存储和管理的大数据量.所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来

MySQL purge log简单吗

MySQL purge log简单吗? 简单: purge log的功能很简单,purge master logs to 指定一个binlog,然后删除之前的文件系统上的binlog文件,并更新binlog.index文件. 复杂: 需要保证purge的原子操作吗, 怎么保证, 有崩溃恢复吗? 之前没有读过代码,想到代码实现上会遇到的问题: 问题1: 如果删除文件比较多,怎么平衡加锁的时间? 问题2: 怎么保证os文件删除和index文件的同步? 问题3: 怎么保证index文件写入是完整的?

python基于mysql实现的简单队列以及跨进程锁

在我们做多进程应用开发的过程中,难免会遇到多个进程访问同一个资源(临界资源)的状况,必须通过加一个全局性的锁,来实现资源的同步访问(同一时间只能有一个进程访问资源). 举个例子: 假设我们用mysql来实现一个任务队列,实现的过程如下: 1. 在Mysql中创建Job表,用于储存队列任务,如下: create table jobs( id auto_increment not null primary key, message text not null, job_status not null

Java连接MySQL数据库及简单操作代码

1.Java连接MySQL数据库 Java连接MySql需要下载JDBC驱动MySQL-connector-java-5.0.5.zip(举例,现有新版本).然后将其解压缩到任一目录.我是解压到D盘,然后将其目录下的MySQL-connector-java-5.0.5-bin.jar加到classpath里,具体如下: "我的电脑"-> "属性" -> "高级" -> "环境变量",在系统变量那里编辑clas